将对象发送到 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

基于旧对象创建新对象修复了此问题。