我似乎无法理解我在客户端应用程序上遇到的错误。我正在订阅 graphql 订阅,并且能够检索更新,但无法将更改推送到绑定到视图的名为“models:ModelClass[]”的打字稿数组。
我是否遗漏或做错了什么?
模型.组件.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);
});
模型类.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;
}
我想 this.models 是 Apollo 返回的数组,您想将新创建的对象添加到初始数组中吗?如果为 true,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 返回不可变对象,因为它们存储在存储中,并且根据您的获取策略,如果您能够改变它们,它可能会错过存储命中。
希望能帮助到你
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)