我遇到类似的问题



用Ngrx更新我的 Angular 项目到 Angular 9之后。当我将Ngrxversion回滚到8时,它工作正常。但是我还需要通过 Angular 9更新将其更新到v9。当我将其添加为具有附加属性的 Material 表中的datasource.data时,就会发生这种情况。我认为,其他属性更改是这样做的原因。但是我根据所得到的内容创建了一个新的数组,并通过使用slice尝试如下。

 myDataArray.slice(0)

它也无法正常工作。

我在这里引用Ngrx版本8到9的更改列表以及迁移指南https://ngrx.io/guide/migration/v9

正如我发现的那样,与 Angular 9的不变性有一个特殊的变化。他们在其中定义了与 Action ,状态和可序列化相关的不变性逻辑。我尝试了他们建议使用Ngrx V9更新来解决这些问题的方法,此处为https://ngrx.io/guide/store/configuration/runtime-checks

但是这些都不适合我。如果有人可以解决此问题,这真的很有帮助。提前致谢..

错误堆栈跟踪..(我也使用了matDataFlatner,这也是发生对象突变的地方)

最佳答案

您应该深度克隆myDataArray,因为它是通过选择器从商店中发出的。在存储中保持数据的不变性是redux模式的重要组成部分,如果您修改myDataArray(取决于选择器,它可能是相同的数据=>对数据的引用),您将直接在存储中更改数据。存储中的数组)。
您可以在尝试进行任何更改之前先执行myDataArray = JSON.parse(JSON.stringify(myDataArray))
有很多更有效的方法可以深度克隆对象,例如使用fast-copy:

import copy from 'fast-copy';

...

myDataArray = copy(myDataArray);

关于angular - 无法添加属性X,更新ngrx 9后对象无法扩展,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60882954/

10-11 11:37