微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Angular NGXS TypeError:无法冻结

如何解决Angular NGXS TypeError:无法冻结

enter image description here

调度动作的代码

  constructor(auth: AuthService,private store: Store) {
    this.userAuth = auth.signedIn.subscribe({ next: (user) => {
      this.user = user;
      this.store.dispatch(new SetUser(user));
    }});
  }

动作定义

import firebase from 'firebase/app';

export class SetUser {
  static readonly type = '[firebase.User | null] Add';

  constructor(public payload: firebase.User | null) {}
}

还有我的商店实现:

    @Action(SetUser)
    add({ patchState }: StateContext<UserStateModel>,{ payload }: SetUser): void {
        patchState({
            user: payload
        });
    }
@State<UserStateModel>({
    name: 'user',defaults: {
        user: null
    }
})

解决方法

使 static readonly type = '[firebase.User | null] Add'; 非静态,如下所示:

static type = '[firebase.User | null] Add';

因为我们看不到你的整个代码(例如你发布了一些没有任何类的构造函数)并且你不会让我们看到(见评论),这是我在抱怨一些只读属性的错误消息之后最好的猜测。

否则可能在 firebase.User 中有一些只读属性,那怎么样?

您在 NGXS 试图冻结的商店中插入了一些东西。 “冻结”涉及某种类型的覆盖,这在只读属性上是不允许的。现在由您来查找那里的只读内容,以防我上面的两个提示没有帮助。

,

这基本上是一个 dupe

问题是您试图以无法冻结的状态存储某些东西。只需克隆它,或只保存您需要的部分。请参阅我的回答 here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。