从组件ngrx更改存储状态

时间:2018-06-25 04:53:28

标签: angular ngrx ngrx-store ngrx-store-4.0

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

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

我使用异步管道从模板中的这种可观察对象读取

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

我只定义动作,但没有修改reducer,但模板是表单,当我保存表单时,我调度了一个更新动作,该动作仅在我的动作中以readonly定义,但是我注意到,每次保存形成并调度商店更改的动作,我没有在reducer中指定任何逻辑来更新更新动作的状态,但我不明白为什么。

enter image description here

1 个答案:

答案 0 :(得分:0)

您正在使用2-way数据绑定将存储状态绑定到一种格式,这是一个不好的做法。
除了缩减程序外,请勿触摸存储状态内部的任何内容。

使用传播运算符获取状态副本:

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

还要注意深拷贝。使用this.quizzModel = JSON.parse(JSON.stringify(quizz ));之类的文件进行深度复制。

提示: 为了避免此类错误,您可以强制将状态保持不变。 选中ngrx-store-freeze