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

Redux实现reducer数组去重添加,解决无限循环与状态更新异常

核心问题根因定位

1. 组件无限重渲染循环的触发原因

  • componentWillReceiveProps 未加「仅首次拉取到products数据后执行一次」的限制:只要后续组件收到任意新props(包括每次调用fetchIsProductLiked触发redux状态更新带来的props变更),都会满足nextProps.products.fetched为true的条件,重复遍历所有product发起请求。
  • 形成闭环死循环:调用fetchIsProductLiked → 触发对应action dispatch → redux状态更新 → 组件接收到新props → 再次进入componentWillReceiveProps判断分支 → 重复发起请求。
  • 未对单个productId的请求做幂等校验,即使products数据无变化也会重复发起相同请求。
  • 代码存在语法错误:nextProps.products.map的回调函数未闭合括号,可能触发异常的组件更新行为。

2. isProductLikedData 状态无法正确更新的原因

  • 非空数组处理逻辑完全偏离需求:错误使用map遍历原有数组,遇到productId不匹配的项时直接返回新的action.payload,直接覆盖原有所有数组项,既未保留历史数据,也未实现去重追加的逻辑。
  • map遍历到productId匹配的项时返回undefined,导致最终生成的数组包含大量空值,数据结构完全不符合预期。
  • AJAX action创建函数中未dispatchFETCH_IS_PRODUCT_LIKED类型的action,导致reducer中定义的fetching状态永远不会被置为true,状态流转逻辑断裂。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 19:06:03