作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:解决方案是返回 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/
我是一名优秀的程序员,十分优秀!