Rol*_*ácz 3 ngrx angular ngrx-store
我打算使用Angular 5创建一个大型应用程序。我也想使用Ngrx来存储我的应用程序的状态。但是有一件事我不明白。
假设我有一个对象(为了简单起见,我现在不使用类或接口),该对象以表示我的状态Store:
let state = {
x: 10,
y: [1, 2, 3]
};
Run Code Online (Sandbox Code Playgroud)
在我阅读的每篇文章中,作者都使用它在化简器Object.assign()中创建状态的副本。例如:
...
case SET_X:
return Object.assign({}, state, {x: 123});
...
Run Code Online (Sandbox Code Playgroud)
但这不会创建状态的深层副本。因此,y新状态的数组与旧状态的数组相同。我认为这与Redux / Ngrx的概念背道而驰。
那么这是否意味着我必须使用ListImmutable.js或类似的东西,而每篇文章都是“错误的”?还是我错过了什么?我认为这不是一个非常特殊的情况。
不,您不必使用Immutable.js(我也不建议您使用)。
如果要更新数组,可以说添加一个值,则应这样做:
const state = {
x: 10,
y: [1, 2, 3]
};
const newState = {
...state,
y: [...state.y, 4]
}
Run Code Online (Sandbox Code Playgroud)
在这里,您会注意到两件事:
-可以使用对象的spread运算符来代替使用Object.assign-
要保持数组的不变性,您必须创建一个新引用。而且,您也可以在数组上使用散布运算符,然后仅添加一个新值。如果要在之前而不是之后添加:y: [4, ...state.y],如果要删除3数组中的所有元素:y: state.y.filter(nb => nb !== 3)
| 归档时间: |
|
| 查看次数: |
2660 次 |
| 最近记录: |