将商品添加到购物车,该商品已经添加了另一个计数

Posted

技术标签:

【中文标题】将商品添加到购物车,该商品已经添加了另一个计数【英文标题】:Adding an item to cart, which is already added with another count 【发布时间】:2021-07-09 05:19:35 【问题描述】:

我正在构建一个电子商务应用程序,并使用以下代码实现添加到购物车功能。 棘手的部分是当我尝试将已添加不同计数的商品添加到购物车时。

所以在下面的代码中,我不是 能够理解“if(existItem) ...”部分。这个块应该处理上面提到的 案例。

import 
  CART_ADD_ITEM,
 from '../constants/cartConstants'
export const cartReducer = (state = 
  cartItems: []
, action) => 
  switch (action.type) 
    case CART_ADD_ITEM:
      const item = action.payload
      const existItem = state.cartItems.map(x => x.product === item.product)
      if (existItem) 
        return 
          ...state,
          cartItems: state.cartItems.map(x => x.product === existItem.product ? item : x)
        
       else 
        return 
          ...state,
          cartItems: [...state.cartItems, item]
        
      
    default:
      return state;
  

【问题讨论】:

【参考方案1】:

这不是一个好的测试。即使是空的也是如此

const cartItems = []
const existItem = cartItems.map(x => x.product === item.product)
if (existItem) console.log("Truthy")

改为:

const cartItems = []
const existItem = cartItems.map(x => x.product === item.product)
if (existItem.length>0) console.log("Items")
else console.log("Empty")

或者更快,因为如果找到它会立即返回:

const cartItems = [product:"fish"]
const item =  product:"fish" 
const existItem = cartItems.find(x => x.product === item.product)
if (existItem) console.log("Item found")
else console.log("Empty")

【讨论】:

我明白你的想法,但我想了解原始代码以及它是否有助于增加该产品的数量。简而言之,在 if 块之后 cartItems 的长度会改变吗?另外,existItem 为空时为 false 我不明白这个问题。无论购物车内容如何,​​您显示的代码将始终执行 if 部分 认为你想的是filter而不是map @mplungjan 是的,但我的问题。 if 块内的条件语句是否改变了 cartItems 数组的长度? 当然可以。我没有看到 const item = action.payload 正在将 item 设置为 cartItems - 如果是这样的话

以上是关于将商品添加到购物车,该商品已经添加了另一个计数的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中将商品计数从购物车屏幕更新到餐厅详细信息屏幕并返回到餐厅详细信息屏幕?

Alexa - 允许用户将商品添加到亚马逊购物篮/购物车。需要帮助

淘宝怎么添加购物车

作业二:优化购物车:用户入口:1.将商品的信息存到文件中;2.将已经购买的商品余额记录存到文件中。商家入口:1.可以添加商品;2.可以修改商品的价格

cookie使用举例(添加购物车商品_移除购物车商品)

(十七)将商品添加到购物车