reactjs - 如何替换 Redux Toolkit reducer 中的整个状态?
问题描述
state
编辑:解决方案是在我完全更换后返回( return state = {...action.payload}
)!但为什么?当我单独替换字段时,我不需要返回它。
我正在使用Redux Toolkit,它简化了一些 Redux 样板。他们做的一件事是使用 Immer 允许您直接“修改”状态(事实上,您不是)。它工作正常,除了我不知道如何完全替换我的状态部分。例如,我想做这样的事情
const reducer = createReducer({ s: '', blip: [] }, {
[postsBogus.type]: (state, action) => {
state = { ...action.payload };
}
但state
保持不变。相反,我必须这样做
[postsBogus.type]: (state, action) => {
state.s = action.payload.s;
state.blip = action.payload.blip;
}
有没有办法可以完全替换状态?
解决方案
是的,正如您所指出的,您必须返回一个新值才能完全替换状态。
即使在“普通”的 Redux reducer 中,赋值state = newValue
也无济于事,因为它所做的只是说局部函数变量namedstate
现在指向内存中的不同值。这对返回新值没有任何作用。
具体来说,对于 Immer,您可以改变代理包装值的内容state
,只要它是一个对象或数组,或者您可以返回一个全新的值,但不能同时返回两者。
推荐阅读
- google-apps-script - 在谷歌表格中 - 如何应用 onEdit 触发器以仅在一张表格上的一个单元格上运行?
- python - 如何将多个图像从一个文件夹移动到python中的另一个文件夹?
- css - 内联时如何设置2个输入具有最小宽度?
- javascript - 在javascript中拆分字符串两次
- javascript - ASP.net API 响应,不返回 json
- c# - 未从 asp.net core webapi 在 Application Insights 中打印日志
- r - 按R中具有间隔的列排序
- java - 如何从android应用程序向WHMCS安装发送正确的发布请求?
- reactjs - 如何在react中使用我们在子组件中App.js文件的createMuiTheme函数中设置的颜色
- unity3d - Unity:如何通过编辑器测试 Oculus OVRinput?工作流程问题