开发者问题收集

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”(您尝试访问的属性)。

解决方案:

希望这能消除您的疑虑 :)

lioncodes
2020-10-05