编辑:解决方案是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减速器中,赋值state = newValue
也不执行任何操作,因为所做的全部就是说,名为的局部函数变量state
现在指向内存中的另一个值。这无助于返回新值。
特别是对于Immer,您可以更改Proxy-wrapped 值的内容,state
只要它是对象或数组即可,或者可以返回一个全新的值,但不能一次返回两者。