【问题标题】:Uncaught TypeError: Can't add property 12, object is not extensible未捕获的类型错误:无法添加属性 12,对象不可扩展
【发布时间】:2017-09-19 15:58:33
【问题描述】:

我似乎无法理解我在客户端应用程序上遇到的错误。我正在订阅 graphql 订阅,并且能够检索更新,但我无法将更改推送到绑定到视图的名为“models:ModelClass[]”的打字稿数组。

我有什么遗漏或做错了吗?

models.component.ts

this.apollo.subscribe({
  query: gql`
    subscription {
      newModelCreated{
        _id
        name
        type
        train_status
        deploy_status
        data_path
        description
        created_at
        updated_at
      }
    }
  `
}).subscribe((data) => {
  console.log("CREATED: " + JSON.stringify(data.newModelCreated));
  console.log(data.newModelCreated);
  var temp:ModelClass = data.newModelCreated;
  this.models.push(temp);
});

model-class.ts

export interface ModelClass {
    _id: string;
    name: string;
    type: string;
    parameters: {
        alpha: number;
    };
    train_status: string;
    deploy_status: string;
    test_accuracy: string;
    created_at: number;
    updated_at: number;
}

【问题讨论】:

  • 顺便说一句,我发现两个对象不兼容!
  • models的类型是什么?
  • 您可以通过Object.isExtensible(this.models)进行调试。如果返回 true,则 this.models 被冻结,您不能再向其中添加任何元素。可以添加日志的详细信息吗?
  • @HardikModha 你不是说“如果返回 false 则 this.models 被冻结”?
  • @Robert Bernstein 是的,你是对的。如果它返回 false 那么它是不可扩展的。大概是因为匆忙而错过了。感谢您指出。 :)

标签: javascript typescript apollo-client graphql-subscriptions


【解决方案1】:

我想 this.models 是 Apollo 返回的一个数组,您想将新创建的对象添加到您的初始数组中吗?如果为真,Apollo 返回一个不可变对象!

您必须克隆初始返回的数组。订阅功能中的内容:

this.apollo
    .watchQuery({query: INITIAL_GQL_REQUEST})
    .subscribe((data) => {
        this.models = data.models.map((model) => {
            return {
                id: model.id, 
                name: model.name,
                another: model.another
            }
        })
    };
});

然后您的订阅请求将能够将创建的模型添加到这个普通的 javascript 数组中。

PS:不确定,但我想 Apollo 返回不可变对象,因为它们存储在存储中,并且根据您的获取策略,如果您能够改变它们,它可能会错过存储命中。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2021-12-09
    • 2019-02-28
    • 2020-04-26
    • 2021-02-02
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2021-06-07
    • 2017-10-28
    相关资源
    最近更新 更多