GraphQL 订阅:如何根据订阅中的事件更新对象
Posted
技术标签:
【中文标题】GraphQL 订阅:如何根据订阅中的事件更新对象【英文标题】:GraphQL subscription: How to update object based on the event in subscription 【发布时间】:2017-08-09 17:48:48 【问题描述】:当事件发布到PasswordUpdated
频道时,我正在尝试更新我之前检索到的用户密码。这是我迄今为止尝试过的,
this.apollo.subscribe(
query: this.passwordUpdatedSubscription
).subscribe((passwordUpdated:any) =>
this.userDataQuery.updateQuery((previousResult) =>
previousResult.getUsers.filter(user => user.name === passwordUpdated.name).forEach(user => user.password = passwordUpdated.password);
);
);
但是,我刚刚从控制台中的错误中发现previousResult
是不可变的。当我尝试更新previousResult
中的密码时,该属性有writable: false
。我该如何解决这个问题?
【问题讨论】:
【参考方案1】:您必须返回更改后的先前结果。查看 subscription docu 获取 apollo 客户端。下面是更新查询的重点。
您可能想查看reacts immutability helper,它稍微解释了问题所在。
【讨论】:
SubscribeToMore
函数仅适用于 apollo-react 客户端。不幸的是,它不适用于 Angular 客户端。我从该页面检查了 updateQuery,看起来他们正在重新创建 newComments
数组并将新的 cmets 推送到它,这是我试图避免的。我正在寻找一种方法来改变以前的结果,而不是从以前的结果中重新创建一个新的结果。
你是对的。我没有找到SubscribeToMore
。您可以检查的一件事是否有可能是 angular 的 apollo 客户端在后台使用 dataIdFromObject
docu 为您执行此操作。当您的响应包含用户的 id 时,它应该更新 apollo 存储。以上是关于GraphQL 订阅:如何根据订阅中的事件更新对象的主要内容,如果未能解决你的问题,请参考以下文章