4

我正在使用选择器从商店中进行选择

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

我在模板中使用异步管道从这个 observable 中读取

[*ngIf="quizz | async; let quizz"]

我只定义了动作并且我没有修改reducer但是当我保存表单时模板是一个表单我调度了一个更新动作,它只在我的动作中定义为只读但我注意到当我保存表单并调度时商店更改的操作,我没有在减速器中指定任何逻辑来更新更新操作的状态,但我不明白为什么。

在此处输入图像描述

4

1 回答 1

1

您正在使用 2-way 数据绑定将存储状态绑定到表单,这是一种不好的做法。
除了减速器外,不要触摸 store 状态内的任何东西。

使用扩展运算符获取状态副本:

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

还要注意深拷贝。使用类似于this.quizzModel = JSON.parse(JSON.stringify(quizz ));深拷贝的东西。

提示: 为避免此类错误,您可以强制状态为不可变。检查ngrx-store-freeze

于 2018-06-25T05:38:01.100 回答