You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React reducer中按key去重存入商品的state更新逻辑失效问题

问题根因

你的productsInMyList状态存储的是商品对象数组,Array.includes()执行的是全等匹配,你直接传入productsInMyList.key(单个key值)和数组内的对象做匹配,永远会返回false,导致去重判断完全失效,所有商品都会被追加进数组。
另外你代码里存在变量名混淆问题:action.payload里取出的单个商品对象和状态里的商品数组同名,也容易引发逻辑错误。

修复方案

改用Array.some()遍历数组匹配每个元素的key值,只要有一个元素的key和新商品key相等,就判定为重复:

const defaultState = {  
  productsInMyList: [],
};

// 取出接口返回的单个商品,修改变量名避免和状态数组重名
const { productsInMyList: newProduct } = action.payload;

// 校验商品是否已存在
const isDuplicate = state.productsInMyList.some(item => item.key === newProduct.key);

const newProductsInMyList = isDuplicate
  ? state.productsInMyList
  : [...state.productsInMyList, newProduct];

return {
  ...state,
  productsInMyList: newProductsInMyList,
};
  • 若你的商品唯一标识不是key(比如是id、sku_id等),把判断逻辑中的key替换为对应的字段即可。

内容的提问来源于stack exchange,提问作者Festina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 06:54:06