NgRx中删除store条目功能失效问题求助
问题根因
- NgRx要求reducer为纯函数,禁止直接修改原状态,必须返回全新的状态副本
- 你当前删除逻辑里使用的
splice是数组原地修改方法,直接修改了原状态对象,触发了NgRx内置的状态不可变性校验,所以抛出错误 - 添加功能正常是因为你用了展开运算符
[...state, action.payload]返回了全新数组,符合不可变要求
修复方案
只需要修改reducer中REMOVE_TUTORIAL分支的逻辑即可,有两种常见实现方式:
方案1:用filter方法过滤要删除的索引
case TutorialActions.REMOVE_TUTORIAL: return state.filter((_, index) => index !== action.payload);
方案2:用slice方法切割数组后拼接
case TutorialActions.REMOVE_TUTORIAL: return [...state.slice(0, action.payload), ...state.slice(action.payload + 1)];
两种方案都没有修改原state,而是直接返回了删除指定元素后的全新数组,符合NgRx的状态规则,修复后删除功能即可正常运行。
内容的提问来源于stack exchange,提问作者mnu-nasir
相关产品推荐
相关产品推荐

