javascript 未在reactjs中定义数组的长度

ezykj2lf  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(93)

我使用fetch将产品作为一个对象获取,在将其设置为我的状态时,我向该对象添加了新的键comments: [],如果是console.log(product.comments),它将返回空数组,这是正确的,但当是console.log(product.comments.length)时,它将返回can't access property "length", product.comments is undefined

useEffect(() => {
    
    setLoading(true)
    fetch(`https://fakestoreapi.com/products/${id}`)
        .then((res) => res.json())
        .then((data) => {
            setProduct({ ...data, comments: [] })
            setLoading(false)
        })
        .catch((err) => console.error(err))
}, [id])

我做错了什么,如何得到comments的长度以便Map它?这是我想做的

`{product.comments.length ? (
  comments.map((comment) => {
   return (
    <li>
     <div className="testimonial">
      <p className="quote">{comment.comment}</p>
     </div>
    </li>
   )
 })
 ) : (
    <h2>Be first to comment</h2>
 )}`

我还尝试将product.comments.length记录到控制台,但得到了相同的错误

czq61nw1

czq61nw11#

您看到的错误消息可能是因为当您第一次设置product状态时,它还没有comments属性,这意味着product. comments最初是undefined,您无法访问undefined的length属性。
要避免此错误,可以在尝试访问product. comments属性之前检查其是否存在。可以使用可选的链接运算符(?.)执行此操作。
试试这个:

console.log(product?.comments?.length)

相关问题