从组件 ngrx 更改存储状态
changing the store state from component ngrx
我正在使用商店
中的 select 或 select
this.quizz = this.store.select(getSelectedQuizz);
我使用异步管道在模板中像这样读取这个可观察对象
[*ngIf="quizz | async; let quizz"]
我只定义了动作,我没有修改减速器,但模板是一个表单,当我保存表单时,我发送了一个更新动作,它只在我的动作中用只读定义,但我注意到每当我保存表单并发送商店更改的操作,我没有在 reducer 中指定任何逻辑来更新更新操作的状态,但我不明白为什么。
您正在使用 2 向数据绑定将存储状态绑定到表单,这是一种不好的做法。
除了 reducer 之外,不要触及存储状态中的任何内容。
使用扩展运算符复制状态:
this.store.select(getSelectedQuizz).subscribe(quizz =>
this.quizzModel = {...quizz };
);
还要注意深拷贝。使用类似 this.quizzModel = JSON.parse(JSON.stringify(quizz ));
的东西进行深度复制。
提示:
为避免此类错误,您可以强制状态不可变。
检查 ngrx-store-freeze
我正在使用商店
中的 select 或 selectthis.quizz = this.store.select(getSelectedQuizz);
我使用异步管道在模板中像这样读取这个可观察对象
[*ngIf="quizz | async; let quizz"]
我只定义了动作,我没有修改减速器,但模板是一个表单,当我保存表单时,我发送了一个更新动作,它只在我的动作中用只读定义,但我注意到每当我保存表单并发送商店更改的操作,我没有在 reducer 中指定任何逻辑来更新更新操作的状态,但我不明白为什么。
您正在使用 2 向数据绑定将存储状态绑定到表单,这是一种不好的做法。
除了 reducer 之外,不要触及存储状态中的任何内容。
使用扩展运算符复制状态:
this.store.select(getSelectedQuizz).subscribe(quizz =>
this.quizzModel = {...quizz };
);
还要注意深拷贝。使用类似 this.quizzModel = JSON.parse(JSON.stringify(quizz ));
的东西进行深度复制。
提示: 为避免此类错误,您可以强制状态不可变。 检查 ngrx-store-freeze