我用选择器从商店中选择

this.quizz = this.store.select(getSelectedQuizz);

我使用异步管道从模板中这样的可观察数据中读取
[*ngIf="quizz | async; let quizz"]

我只定义了操作,没有修改reducer,但是模板是一个表单,当我保存表单时,我发送了一个update操作,这个操作只在我的readonly操作中定义,但是我注意到当我保存表单并发送操作时,存储区发生了变化,我没有在reducer中指定任何逻辑来更新更新的状态但我不明白为什么。
angular - 从组件ngrx更改存储状态-LMLPHP

最佳答案

您正在使用双向数据绑定将存储状态绑定到窗体,这是一种不好的做法。除减速器外,不要触摸存储状态内的任何东西。
使用Spread运算符获取状态的副本:

this.store.select(getSelectedQuizz).subscribe(quizz =>
    this.quizzModel = {...quizz };
);

还要注意深层次的复制。使用类似于this.quizzModel = JSON.parse(JSON.stringify(quizz ));的内容进行深度复制。
暗示:
为了避免这种错误,您可以强制状态不可变。
检查ngrx-store-freeze

09-05 21:45