Mar*_*son 5 javascript object redux
我正在使用 redux-starter-kit(其中包括用于可变更新的 Immer 库),但由于某种原因,这个减速器不起作用:
reInitializeState(state, action) {
state = Object.assign({}, initialState);
state.someProperty = true; // this does not get set
},
Run Code Online (Sandbox Code Playgroud)
但这个确实:
reInitializeState(state, action) {
Object.assign(state, initialState);
state.someProperty = true; // this does
},
Run Code Online (Sandbox Code Playgroud)
我希望他们做同样的事情。这里发生了什么?
使用 Immer,您可以就地改变对象以创建下一个不可变副本。在第一个示例中,因为state作为参数传入,所以执行以下操作:
state = Object.assign({}, initialState);
Run Code Online (Sandbox Code Playgroud)
重新分配state给一个新对象,因此someProperty对该新对象的设置不会导致任何更改 - 您必须对参数本身进行变异。
在第二个示例中,您不会重新分配state给其他对象,因此调用state.someProperty和修改它会修改原始状态对象。
| 归档时间: |
|
| 查看次数: |
1014 次 |
| 最近记录: |