@laravel_creative_3103

По какой причине реакт не воспринимает массив?

comments.map is not a function
С чем это может быть связано?

export interface ICommentResponse {
    id: number,
    comment: string,
    createdComment: any
}
export type CommentResponseType = ICommentResponse[];
const Comment = () => {

    const dispatch = useAppDispatch();

    const [comments,  setComments] = useState<CommentResponseType>([])
   
    return (
        <div>
            {comments.map((c: ICommentResponse) => (  //здесь возникает ошибка comments.map is not a function
                <>
                    <p>{c.id}</p>
                    <p>{c.comment}</p>
                    <p>{c.createdComment}</p>
                </>
            ))}
        </div>
    )
}

export default Comment
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 1
michael_mashush
@michael_mashush
Точно так и не понял в чем у Вас заключается проблема, но лично у меня данный код работает. Попробуйте его написать таким образом:

import React from 'react'

export type CommentItem = {
  id: number
  comment: string
  createdComment: any
  // eslint ругается на тип "any"
  // лучше от него потом избавиться
}

export type CommentList = CommentItem[]

const Comment = () => {

  const [comments, setComments] = React.useState<CommentList>([])
 
  return (
    <div>
      {/* 
        для comment-объекта можно не устанавливать тип, поскольку 
        среда разработки поймёт что это объект массива с типом CommentList (то есть CommentItem)
      */}
      {comments.map((comment) => (
        <>
          <p>{comment.id}</p>
          <p>{comment.comment}</p>
          <p>{comment.createdComment}</p> 
        </>
      ))}
    </div>
  )

}

export default Comment


У Вас точно импортирован хук useState?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы