【发布时间】:2021-02-23 18:39:45
【问题描述】:
将 Angular 4 升级到 10 和 NGRX 版本(到 v 9)后,我在尝试执行任何操作时遇到多个错误。
每次我进行 http 调用时,我的应用程序都会中断。
我遇到错误,有时没有错误/警告,但页面已损坏。
- 无法添加属性 xxx,对象不可扩展
- 无法分配给对象“[object Object]”的只读属性 xxx
【问题讨论】:
标签: javascript angular upgrade ngrx readonly
将 Angular 4 升级到 10 和 NGRX 版本(到 v 9)后,我在尝试执行任何操作时遇到多个错误。
每次我进行 http 调用时,我的应用程序都会中断。
我遇到错误,有时没有错误/警告,但页面已损坏。
【问题讨论】:
标签: javascript angular upgrade ngrx readonly
问题与Angular无关,是NGRX版本升级问题
存储对象是只读的,因此任何在action、reducer、effect和选择器中存储数据的更新都会引发您提到的类似错误
解决这个问题:
为了创建一个新的参考,你可以使用
...运算符(嵌套对象的棘手操作)
JSON.parse(JSON.stringfy(data))(不完全证明嵌套对象和所有类型)
Object.assign({}, obj);
cloneDeep(如果您使用 lodash)或编写自定义方法来深度克隆对象
另外你可能会遇到一些语法错误,请使用链接
https://ngrx.io/guide/migration 并阅读您要从中迁移的版本的指南
https://ngrx.io/guide/migration/v8
解决方法: 在之前的 NgRx 版本中,运行时不变性检查是可选的。在 9 及更高版本中,不可变运行时检查默认开启。
所以你可以将它设置为 false :
@NgModule({
imports: [
StoreModule.forRoot(reducers, {
runtimeChecks: {
strictStateImmutability: false,
strictActionImmutability: false,
},
}),
],
})
export class AppModule {}
您的代码将像以前一样工作,但这不是正确的解决方案。
使用此链接了解更多信息
【讨论】: