Redux reducer中能否返回新原始值?filterReducer实现疑问
问题解答
完全可以直接返回action.payload作为新的filter值,原因如下:
- 字符串属于原始数据类型,本身具备不可变性——你无法直接修改一个字符串的内容,每次赋值都是生成新的字符串。所以直接返回
action.payload(合法取值为"all"/"active"/"completed"),本质就是返回了一个全新的状态值,完全符合Redux"不能修改原state,必须返回新状态"的要求。 - 扩展运算符(
...)这类不可变更新方法,主要是针对引用类型(对象、数组)的——因为引用类型修改内部属性时会直接影响原state,而原始类型不存在这个问题,所以不需要额外处理。
给你一个具体的filterReducer实现示例:
const filterReducer = (state = "all", action) => { switch (action.type) { case "CHANGE_FILTER": // 直接返回合法的payload值即可 return action.payload; default: return state; } };
另外你提到的RTK也支持这种写法,不管是传统Redux还是RTK,针对原始类型状态的更新,直接返回新值都是标准且合规的做法。
内容的提问来源于stack exchange,提问作者GTB
相关产品推荐
相关产品推荐

