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

标签 reactjs redux react-redux immer.js

编辑:解决方案是返回 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什么都不做,因为所做的只是说明名为 state 的局部函数变量现在指向内存中的不同值。这对返回新值没有任何作用。
对于 Immer,you can either mutate the contents of the Proxy-wrapped state value as long as it's an object or array, or you can return an entirely new value, but not both at once .

关于reactjs - 如何在 Redux Toolkit reducer 中替换整个状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60002846/

相关文章:

javascript - 更好的调用 'call' redux-saga 的方法

javascript - 我们如何与 npm start 或 npm build 一起运行 jest 单元测试?

reactjs - 如何在微前端架构中共享 redux store?

javascript - 使用 redux 时 React 主组件被调用两次

reactjs - Redux reducers,我可以通过一个 Action 更改几个变量吗(也就是实现单选按钮的逻辑)?

javascript - 如何在js中打印对象内部的字符串?

javascript - ReactJS react 路由器服务器渲染问题

javascript - 在 redux 中覆盖整个状态

javascript - 如何使用 create-react-app 从外部模块导入 svg react 组件?

reactjs - 使用 Bootstrap 的模态不会更新内容