使用React-Redux开发购物车时无法更新商品数量问题求助
问题核心原因
你的代码有两个核心错误导致数量更新不生效:
updateQuantity方法返回了更新后的新商品对象,但你调用该方法后完全没有接收、使用这个返回值,原数组里的商品对象没有被替换- Redux要求state是不可变的,不能直接修改原state里的商品对象,必须生成新的商品数组替换原数组
修复方案
首先修改reducer中ADD_PRODUCT_TO_CART分支的逻辑,正确使用updateQuantity的返回值替换数组中对应的商品:
case ADD_PRODUCT_TO_CART: const productInCart = state.products.find( (p) => p.id === action.product.id ); if (!productInCart) { // 新增商品时直接初始化quantity为1,避免后续逻辑异常 return { ...state, products: [...state.products, {...action.product, quantity: 1}], }; } // 接收updateQuantity返回的更新后商品 const updatedProduct = updateQuantity(productInCart); // 生成新的商品数组,用更新后的商品替换原位置的商品 const newProducts = state.products.map(p => p.id === action.product.id ? updatedProduct : p ); return { ...state, products: newProducts, };
如果需要同步计算购物车总价格和总商品数,可以在返回新state时新增对应字段计算:
return { ...state, products: newProducts, totalCount: newProducts.reduce((sum, p) => sum + p.quantity, 0), totalPrice: newProducts.reduce((sum, p) => sum + p.quantity * p.price, 0) }
额外优化说明
你当前新增商品时直接传入的action.product默认quantity是0,第一次新增时直接设置quantity为1可以避免后续判断逻辑冗余,和updateQuantity的逻辑也能更好对应。
内容的提问来源于stack exchange,提问作者S. N
相关产品推荐
相关产品推荐

