不了解不可变的对象

时间:2019-02-19 07:33:44

标签: angular redux ngrx ngxs

我正在使用Ngxs,发现了developmentMode。 我打开了它,发现了一些我不理解的新错误。

在我的商店中,我有过滤器。我已经制作了一个外观函数来获取它们并进行调整。

filterBarFiltrySnapshot(obiektId: Obiekty): any[] {
    let filtry = this.store.selectSnapshot((state: AppStateModel) => state.obiektyConfig[obiektId].filterBarFiltry);
    if (filtry) {
      filtry = filtry.map(item => {
        if (item.formValue) {
          Object.values(item.formValue).forEach(item2 => {
            item2.value = this.wstawianieWartosciService.wstaw(item2.value, obiektId);
          });
        }
        return item;
      });
    }
    return filtry;
  }

打字稿说TypeError: Cannot assign to read only property 'value' of object '[object Object]'

但是为什么呢? this.store.selectSnapshot返回数组,难道不是它在商店的副本吗? 我将代码更改为此的事件:

let filtry = [
    ...this.store.selectSnapshot((state: AppStateModel) => state.obiektyConfig[obiektId].filterBarFiltry)
];

仍然有错误。

如何更改代码以满足不可变的限制?

1 个答案:

答案 0 :(得分:0)

store.selectSnapShot的调用将返回 the 状态,而不是其副本。因此,如果您修改返回的对象,则会破坏状态的不变性-这就是为什么您看到框架返回的错误的原因。

我不清楚您的过滤器功能到底想做什么,但不能做的是修改当前状态。它可以基于过滤器值obiektId | objectId投射出它的视图?

另外-这是一个类似的question,我发布了一段时间:状态修改。

NGXS管道中的新功能将使其更易于使用不可变状态,这一点也不值钱-请参阅NGXS团队的最新post