无法增加购物车中的商品
cannot increment item in cart
我想在每次将商品添加到购物车时增加商品数量。我的代码不起作用,我在 Cart.js 收到错误“无法读取未定义的属性(读取 'length')”,我不知道为什么.谁能帮我?非常感谢!
Codesandbox link:https://codesandbox.io/s/redux-shop-cart-forked-tlpek?file=/src/components/Cart.js
您忘记从父 (app.js
) 组件传递 cartItems
道具。
...
// in line no:75
<Cart cartItems={this.state.cartItems} />
...
同时更改您的 addToCart
方法:
// in line no: 19
addToCart = (product) => {
const isInCart = cartItems.some((item) => item.id === product.id);
let newCart = [];
if (isInCart) {
newCart = this.state.cartItems.map((cart) => {
return {
...cart,
quantity: Number(cart.quantity) + 1
};
});
} else {
newCart = [...this.state.cartItems, { ...product, quantity: 1 }];
}
this.setState({
cartItems: newCart
});
};
您期待 cart.js
文件中的 cartItems
道具,但您没有从父组件传递它。
这是因为在 APP.js 中,在第 75 行调用 <Cart />
时,您没有传递道具,但您试图从 card.js 中的道具访问值 4 const { cartItems } = props;
所以它将是未定义的,长度无法在未定义的情况下读取。
我建议将 app.js 中的第 75 行更改为 <Cart cartItems={this.state.cartItems}/>
更正:
addToCart = (product) => {
let alreadyIncart = false;
let cartItems = this.state.cartItems.slice();
cartItems.length !== 0
? cartItems.forEach((item) => {
if (item.id === product.id) {
item++;
alreadyIncart = true;
}
if (!alreadyIncart) {
cartItems.push({ ...product, count: 1 });
}
})
: cartItems.push({ ...product, count: 1 });
this.setState({ cartItems: cartItems });
};
我想在每次将商品添加到购物车时增加商品数量。我的代码不起作用,我在 Cart.js 收到错误“无法读取未定义的属性(读取 'length')”,我不知道为什么.谁能帮我?非常感谢!
Codesandbox link:https://codesandbox.io/s/redux-shop-cart-forked-tlpek?file=/src/components/Cart.js
您忘记从父 (app.js
) 组件传递 cartItems
道具。
...
// in line no:75
<Cart cartItems={this.state.cartItems} />
...
同时更改您的 addToCart
方法:
// in line no: 19
addToCart = (product) => {
const isInCart = cartItems.some((item) => item.id === product.id);
let newCart = [];
if (isInCart) {
newCart = this.state.cartItems.map((cart) => {
return {
...cart,
quantity: Number(cart.quantity) + 1
};
});
} else {
newCart = [...this.state.cartItems, { ...product, quantity: 1 }];
}
this.setState({
cartItems: newCart
});
};
您期待 cart.js
文件中的 cartItems
道具,但您没有从父组件传递它。
这是因为在 APP.js 中,在第 75 行调用 <Cart />
时,您没有传递道具,但您试图从 card.js 中的道具访问值 4 const { cartItems } = props;
所以它将是未定义的,长度无法在未定义的情况下读取。
我建议将 app.js 中的第 75 行更改为 <Cart cartItems={this.state.cartItems}/>
更正:
addToCart = (product) => {
let alreadyIncart = false;
let cartItems = this.state.cartItems.slice();
cartItems.length !== 0
? cartItems.forEach((item) => {
if (item.id === product.id) {
item++;
alreadyIncart = true;
}
if (!alreadyIncart) {
cartItems.push({ ...product, count: 1 });
}
})
: cartItems.push({ ...product, count: 1 });
this.setState({ cartItems: cartItems });
};