从组件ngrx更改存储状态

问题描述 投票:2回答:1

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

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

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

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

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

enter image description here

angular ngrx ngrx-store ngrx-store-4.0
1个回答
0
投票

您正在使用双向数据绑定将存储状态绑定到表单,这是一种不好的做法。 除了减速器之外,请勿触摸存储状态内的任何物体。

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

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

还要注意深层复印。使用类似this.quizzModel = JSON.parse(JSON.stringify(quizz ));的东西进行深层复制。

提示:为了避免这种错误,你可以强制状态是不可变的。检查ngrx-store-freeze

© www.soinside.com 2019 - 2024. All rights reserved.