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

