未捕获的类型错误:无法读取未定义的属性(读取‘id’)
2022-05-11
24374
我得到未定义的结果,因为
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',
},
]
3个回答
这可以解决您的问题:
1- 您没有从 map 返回任何内容
2- 最好在 cartitems 的设置状态下使用函数类型
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}])
}
}
shahrooz bazrafshan
2022-05-11
问题
在初始渲染中,您尝试访问不存在的属性。
换句话说,在初始渲染中,您的
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>
))}
Amr
2022-05-11
问题是:您未在
.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
})
Georgy
2022-05-11