【问题标题】:GraphQL subscription: How to update object based on the event in subscriptionGraphQL 订阅:如何根据订阅中的事件更新对象
【发布时间】: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。我该如何解决这个问题?

【问题讨论】:

    标签: angular graphql apollo-client graphql-subscriptions


    【解决方案1】:

    您必须返回更改后的先前结果。查看 subscription docu 获取 apollo 客户端。下面是更新查询的重点。

    您可能想查看reacts immutability helper,它稍微解释了问题所在。

    【讨论】:

    • SubscribeToMore 函数仅适用于 apollo-react 客户端。不幸的是,它不适用于 Angular 客户端。我从该页面检查了 updateQuery,看起来他们正在重新创建 newComments 数组并将新的 cmets 推送到它,这是我试图避免的。我正在寻找一种方法来改变以前的结果,而不是从以前的结果中重新创建一个新的结果。
    • 你是对的。我没有找到SubscribeToMore。您可以检查的一件事是否有可能是 angular 的 apollo 客户端在后台使用 dataIdFromObject docu 为您执行此操作。当您的响应包含用户的 id 时,它应该更新 apollo 存储。
    猜你喜欢
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 2021-03-17
    • 2021-01-29
    相关资源
    最近更新 更多