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
相关产品推荐
相关产品推荐

