如何在 Redux Toolkit 减速器中替换整个状态?

IT技术 reactjs redux react-redux immer.js
2021-04-30 06:26:39

编辑:解决方案是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;
}

有没有办法完全替换状态?

1个回答

是的,正如您所指出的,您必须返回一个新值才能完全替换状态。

即使在“普通”的 Redux reducer 中,赋值state = newValue也不做任何事情,因为所做的一切只是说命名局部函数变量state现在指向内存中的不同值。这对返回新值没有任何作用

特别是对于 Immer,您可以改变Proxy-wrapped内容state只要它是一个对象或数组,或者您可以返回一个全新的值,但不能同时返回