ReactJS - TypeError:无法读取未定义的属性“name”,但它是
2020-10-05
111
我有一个 map 函数,它应该从我创建的列表中获取数据并将其显示给用户,但是每当我尝试这样做时,它都会给我一个 typeerror,这是我的 map 函数:
{product.map((item, idx)=>
<div key={idx}>
<h3 className='productName'>{item[idx].name}</h3>
<div className='productImageContainer'>
<img src={item[idx].image}></img>
</div>
<span className='productPrice'><strong>${item[idx].Price}.00</strong></span>
<br></br>
<Button className='removeProductButton' variant='danger'><MdCancel></MdCancel> Remove</Button>
</div>)}
这是我将项目附加到数组的代码片段:
const [product, getProduct]= useState([])
const getProducts=()=>
{
let X = JSON.parse(localStorage.getItem('products'))
getProduct([...product, X])
}
我收到以下错误:“TypeError:无法读取未定义的属性‘name’”,我已尝试手动控制台记录列表的每个元素,但它肯定不是未定义的,为什么会发生这种情况,我该如何修复它?
2个回答
您可以直接在
item
上访问
name
属性,如下所示:
<h3 className='productName'>{item.name}</h3>
item
是列表中正在处理的当前元素。
dwosk
2020-10-05
当您通过数组进行映射时,您已经遍历了每个元素,这就是代码中的“item”字段。它是您正在映射的数组中的每个单独项目。
现在来看看为什么它会抛出错误: 当您通过数组进行映射并且您位于特定项目内时,您尝试执行 item[idX].name,它会尝试查找键值为 idX 的对象(在您的情况下未定义),并且由于它未定义,它会抛出错误,即它无法读取未定义的属性“name”(您尝试访问的属性)。
解决方案:
- 只需执行 {item.name} 即可访问项目对象(您正在进行的特定迭代的对象)的名称。
- 您也可以解构项目中想要的东西,以使您的代码看起来更清晰。参考: https://dmitripavlutin.com/javascript-object-destructuring/
希望这能消除您的疑虑 :)
lioncodes
2020-10-05