首页 > 解决方案 > 如何替换 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;
}

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

标签: reactjsreduxreact-reduximmer.js

解决方案


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

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

具体来说,对于 Immer,您可以改变代理包装值的内容state,只要它是一个对象或数组,或者您可以返回一个全新的值,但不能同时返回两者


推荐阅读