![](/img/trans.png)
[英]Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'id')
[英]Uncaught TypeError: Cannot read properties of undefined (reading 'id')
我未定義,因為cartitems
中的item
未定義,我該如何解決?
1.
import React,{useState} from 'react' import {products} from './data' function app() { const [cartitems, setCartitems] = useState([]) const onAddToCart = (product)=>{ const exist = cartitems.find((item)=> { return product.id == item.id }) if(exist){ setCartitems(cartitems.map((item)=>{ item.id == product.id ? {...exist, qnty: exist.qnty + 1}: item })) } else{ setCartitems([...cartitems, {...product, qnty: 1}]) } } return ( <div> {products.map((product)=>( <div key={product.id}> <img src={product.image} style= {{width:"200px"}}/> <p>{product.name}</p> <button onClick={() => onAddToCart(product)}>Add To Cart</button> </div> ))} </div> ) } export default app
export const products = [ { id: '1', name: 'MacBook', price: 1400, image: 'https://picsum.photos/id/180/2400/1600', }, { id: '2', name: 'Old Car', price: 2400, image: 'https://picsum.photos/id/111/4400/2656', }, { id: '3', name: 'W Shoes', price: 1000, image: 'https://picsum.photos/id/21/3008/2008', }, ]
這可以解決您的問題:
1-你沒有從地圖返回任何東西
2-最好在設置狀態下使用函數類型來處理caritems
function app() {
const [cartitems, setCartitems] = useState([])
const onAddToCart = (product)=>{
const exist = cartitems.find((item)=> {
return product.id == item.id
})
if(exist){
setCartitems(cartitems.map((item)=>
item.id == product.id ? ({...exist, qnty: exist.qnty + 1}): item
))
}
else{
setCartitems(s=>[...s, {...product, qnty: 1}])
}
}
在您的初始渲染中,您試圖訪問一個不存在的屬性。 換句話說,在您的初始渲染中,您的products
是一個空數組
使用短路
{products &&
products.map((product) => (
<div key={product.id}>
<img src={product.image} style={{ width: "200px" }} />
<p>{product.name}</p>
<button onClick={() => onAddToCart(product)}>
Add To Cart
</button>
</div>
))}
問題是:您沒有在.map
中返回任何內容。 這就是你得到undefined
的原因。
setCartitems(cartitems.map((item)=>{
item.id == product.id ? {...exist, qnty: exist.qnty + 1}: item
}))
只需刪除{
和}
:
setCartitems(cartitems.map((item)=>
item.id == product.id ? {...exist, qnty: exist.qnty + 1}: item
))
或顯式添加return
:
cartitems.map(item => {
if (item.id == product.id) {
return { ...exist, qnty: exist.qnty + 1 }
}
return item
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.