将对象发送到 NgRx Store 后无法重置对象
Object cannot be reset after sending object to NgRx Store
我的 Angular 8 项目中有一个模板驱动的表单。
此表单使用 NgModel 在单击按钮时获取数据,该按钮会触发发送该数据的功能,以及一些其他预设值到 Action 中以通过电子邮件服务发送消息。
对象:
// Data for the reply
public messageResponse = {
transmissionRequest: {
arrivalTime: null,
attachments: [
{
contents: null,
filename: null
}
],
ccRecipients: null,
direction: 'OUTBOUND',
originator: null,
payload: null,
recipient: null,
subject: null,
type: 'email'
}
};
尝试的更改:
this.messageResponse.transmissionRequest.payload = '';
随消息发送的操作:
this.store.dispatch(new SendReply(this.messageResponse));
我试图在商店分派后直接将有效负载更改回空字符串,在商店分派后的函数中,在商店成功订阅实际通过 http 发送的消息时,以及所有这些解决方案出现以下错误:
ERROR TypeError: Cannot assign to read only property 'payload' of object '[object Object]'
当我注释掉dispatch函数时,payload修改成功,没有报错
我不会改变商店,因为我知道这是无法改变的。我只是想在消息发送后更改视图中显示的数据。
调度到存储是否会更改原始对象的权限?
我该如何解决这个问题?
动作是不可变的,NgRx 有运行时检查,当动作被分派时会冻结动作。
因为对象被冻结,所以你有这个错误。
查看文档了解更多信息,https://ngrx.io/guide/store/configuration/runtime-checks#strictactionimmutability
基于旧对象创建新对象修复了此问题。
我的 Angular 8 项目中有一个模板驱动的表单。
此表单使用 NgModel 在单击按钮时获取数据,该按钮会触发发送该数据的功能,以及一些其他预设值到 Action 中以通过电子邮件服务发送消息。
对象:
// Data for the reply
public messageResponse = {
transmissionRequest: {
arrivalTime: null,
attachments: [
{
contents: null,
filename: null
}
],
ccRecipients: null,
direction: 'OUTBOUND',
originator: null,
payload: null,
recipient: null,
subject: null,
type: 'email'
}
};
尝试的更改:
this.messageResponse.transmissionRequest.payload = '';
随消息发送的操作:
this.store.dispatch(new SendReply(this.messageResponse));
我试图在商店分派后直接将有效负载更改回空字符串,在商店分派后的函数中,在商店成功订阅实际通过 http 发送的消息时,以及所有这些解决方案出现以下错误:
ERROR TypeError: Cannot assign to read only property 'payload' of object '[object Object]'
当我注释掉dispatch函数时,payload修改成功,没有报错
我不会改变商店,因为我知道这是无法改变的。我只是想在消息发送后更改视图中显示的数据。
调度到存储是否会更改原始对象的权限?
我该如何解决这个问题?
动作是不可变的,NgRx 有运行时检查,当动作被分派时会冻结动作。 因为对象被冻结,所以你有这个错误。
查看文档了解更多信息,https://ngrx.io/guide/store/configuration/runtime-checks#strictactionimmutability
基于旧对象创建新对象修复了此问题。