温馨提示:本文翻译自stackoverflow.com,查看原文请点击:reactjs - How can you replace entire state in Redux Toolkit reducer?
react-redux reactjs redux immer.js

reactjs - 如何在Redux Toolkit reducer中替换整个状态?

发布于 2020-04-10 23:20:47

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

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

查看更多

提问者
Cerulean
被浏览
82
markerikson 2020-02-01 00:18

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

即使在“普通” Redux减速器中,赋值state = newValue也不执行任何操作,因为所做的全部就是说,名为局部函数变量state现在指向内存中的另一个值。这无助于返回新值。

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