我用选择器从商店中选择
this.quizz = this.store.select(getSelectedQuizz);
我使用异步管道从模板中这样的可观察数据中读取
[*ngIf="quizz | async; let quizz"]
我只定义了操作,没有修改reducer,但是模板是一个表单,当我保存表单时,我发送了一个update操作,这个操作只在我的readonly操作中定义,但是我注意到当我保存表单并发送操作时,存储区发生了变化,我没有在reducer中指定任何逻辑来更新更新的状态但我不明白为什么。
最佳答案
您正在使用双向数据绑定将存储状态绑定到窗体,这是一种不好的做法。除减速器外,不要触摸存储状态内的任何东西。
使用Spread运算符获取状态的副本:
this.store.select(getSelectedQuizz).subscribe(quizz =>
this.quizzModel = {...quizz };
);
还要注意深层次的复制。使用类似于
this.quizzModel = JSON.parse(JSON.stringify(quizz ));
的内容进行深度复制。暗示:
为了避免这种错误,您可以强制状态不可变。
检查ngrx-store-freeze