使用ngrx或ngxs时,我们是否自动获得对象不变性?

问题描述 投票:2回答:2

使用NGRXNGXS时,我们是否自动获得所有域实例的对象不变性?我读到的大多数上下文似乎都表明了这一点,但也有类似“当我们使用带有不可变对象的NGRX ......”这样的措辞时,所以只想仔细检查一下我们不想再使用像immutable.js这样的东西了。到ngrx?

javascript angular immutability immutable.js
2个回答
1
投票

在处理开发模式时,NGXS确实使用不可变对象。请参考ngxs / store repo中的state-operations.ts文件来验证这一点。

从第36行开始并按照代码:

if (this._config.developmentMode) {
  return this.ensureStateAndActionsAreImmutable(rootStateOperations);
}

ensureStateAndActionsAreImmutabledeepFreeze(),它在值上做Object.freeze(value)

因此在使用ngx时不需要immutable,immer或任何不可变库。

如果你使用NGRX,你可能想使用ngrx-store-freeze而不是第三方库。这有一个依赖(deep-freeze-strict),将确保不变性。


4
投票

不,我们没有。如果不使用不可变库,则在添加到状态之前,必须在reducer(NGRX)或动作处理程序(NGXS)中手动深度克隆传递的有效内容。

© www.soinside.com 2019 - 2024. All rights reserved.