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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:15:44