javascript - Redux 中 Immer 中 Object.assign() 的意外行为
问题描述
我正在使用 redux-starter-kit (其中包括用于可变更新的 Immer 库),由于某种原因,这个减速器不起作用:
reInitializeState(state, action) {
state = Object.assign({}, initialState);
state.someProperty = true; // this does not get set
},
但是这个可以:
reInitializeState(state, action) {
Object.assign(state, initialState);
state.someProperty = true; // this does
},
我希望他们做同样的事情。这里发生了什么?
解决方案
使用 Immer,您可以就地改变对象以创建下一个不可变副本。在第一个示例中,因为state
作为参数进来,所以:
state = Object.assign({}, initialState);
重新分配state
给一个新对象,因此someProperty
对该新对象的设置不会导致任何更改——您必须对参数本身进行变异。
在第二个示例中,您不会重新分配state
给其他东西,因此调用state.someProperty
和修改它会修改原始状态对象。
推荐阅读
- python - ValueError:磁带仍在录制,如果您尝试重新输入已经激活的磁带,可能会发生这种情况
- linux - 如何进入 Xilinx ZCU102 u-boot 提示符
- html - 使用 h5p-standalone 插件放置 H5P 文件的位置
- java - 获取 Firebase 存储上图像的 URL
- json - 如何使用 JQ 合并和重塑嵌套对象?
- spring-boot - 在 Spring Boot 中使用 apache cxf 在生产者端公开的用于休息 api 的 Spring Cloud 合约
- c# - 如何扩展 asp.net 样板中的设置
- spring-boot - 在本地主机中运行 springboot 应用程序时出错
- json - 使用逻辑应用分解 Log Analytics 查询结果
- javascript - 无法将 Active 类添加到反应映射功能中的组列表项