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

React Reducer更新条目未覆盖反而新增重复项,代码错误是什么?

问题原因
  • 新增逻辑错误:你当前对stories字段的赋值逻辑是[...storie.stories, { ...action.updates }],属于保留原数组所有元素后追加新对象,自然不会覆盖原有条目,只会生成新条目。
  • 匹配逻辑错误:判断条件中storie.stories.storieID的写法不成立,从后续代码可看出storie.stories是数组类型,数组本身不存在storieID属性,该匹配条件无法正确触发你要的修改逻辑。
修复方案

你需要先匹配外层符合aNoteId的条目,再对内层stories数组做遍历,找到对应storieID的条目做修改即可,参考代码如下:

case "EDIT_KSTORY":
  return state.map((storie) => {
    // 匹配外层aNoteId符合要求的项
    if (storie.aNoteId === action.aNid) {
      return {
        ...storie,
        // 遍历内层stories数组,仅修改对应ID的条目
        stories: storie.stories.map((storyItem) => {
          return storyItem.storieID === action.sID 
            ? { ...storyItem, ...action.updates } 
            : storyItem
        })
      };
    }
    // 不符合的项原样返回
    return storie;
  });
核心修改点
  • 拆分两层匹配逻辑,先匹配外层aNoteId,再对内层数组逐元素匹配storieID,修正了原代码直接从数组取storieID的错误
  • 内层数组使用map遍历修改,仅对匹配到的条目合并更新内容,其余条目原样返回,不会新增多余条目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:24:06