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

在React+TypeScript环境下如何修改reduxjs/toolkit的state?

Redux Toolkit state 更新相关问题解答

你提到的两种更新写法在Redux Toolkit中都是合法可用的,不需要强制沿用原生react-redux的手动immutable更新写法。

为什么可以直接使用.push等可变方法修改state?

Redux Toolkit的createSlice API内部默认集成了Immer库,它会把你写的「直接修改state」的语法自动转换成符合Redux原生规范的不可变更新操作,和你之前手动写展开运算符生成新state的效果完全一致,不会破坏Redux状态可预测、可追溯的核心特性。

你给出的两段示例代码,只要去掉旧写法里多余的对象包裹,最终运行效果完全相同:
旧的合法写法参考:

case CartActionTypes.ADD_ITEM:
  return {
    ...state,
    cartItems: [...state.cartItems, action.payload]
  };

Redux Toolkit 简化写法:

addItemToCart(state, action) {
  state.cartItems.push(action.payload);
}

是否需要始终手动返回更新后的state?

不需要。
只有当你更习惯传统的不可变写法时,才需要手动返回新的state对象,两种写法可以自由选择。
唯一需要注意的规则是:不要在同一个reducer函数中同时使用「直接修改state」和「手动返回新state」两种写法,如果你手动返回了新的state,那么同一个函数内对state做的直接修改会被直接忽略。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:45:00