图形 |阿波罗客户端 |如何更改现有订阅中的变量?

Posted

技术标签:

【中文标题】图形 |阿波罗客户端 |如何更改现有订阅中的变量?【英文标题】:Graphql | Apollo client | How to change variables in existing subscription? 【发布时间】:2019-09-24 10:13:28 【问题描述】:

我已经设置了一个带有订阅的 Apollo 服务器和客户端。在基本设置中一切都按预期工作。我正在使用 Apollo Client 的订阅方法进行订阅。如下所示:

graphqlClient.subscribe( query, variables ).subscribe(
next: d => 
  onData(d);
,
error: error => 
  handleErrorResponse(error).catch(e => 
    Logger.notifyError(new Error(`Real-time update error | $e.message.`));
  );

);

这有效,我可以看到我的 onData 回调触发事件。

问题 - 在我们的应用程序中,订阅过滤器是动态的,用户可以选择会影响过滤器的不同值。我浏览了文档和许多(许多)文章,但找不到更新过滤器或如何处理此用例的方法?

期望 - 一旦用户选择任何值并应用过滤器,我想在服务器上更新我的订阅以开始使用新的过滤器?

【问题讨论】:

【参考方案1】:

订阅一经创建,便无法修改。当过滤器更改时,您需要在当前的Observer 上调用unsubscribe,然后通过使用更新的变量调用subscribe 方法来创建一个新的Observer。如果您查看the source code,这就是react-apolloSubscription 组件处理它的方式。如果您碰巧已经在使用 React,我强烈建议您使用可用的组件,而不是尝试重新发明***。

【讨论】:

嘿丹尼尔,感谢您的指点。我确实看过那段代码,但我错过了 endSubscription 部分。我们正在尝试在现有的 React 应用程序中添加这种支持,该应用程序已经具有 Web 套接字支持和使用 Mobx 的状态管理。当前目标是增量添加 Graphql。

以上是关于图形 |阿波罗客户端 |如何更改现有订阅中的变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 apollo ios 客户端实现 graphql 订阅

如何在 apollo 客户端中检测订阅(websocket)的断开和重新连接

iOS 订阅包中的免费试用期更改

无需 GUI 即可收听 graphql 订阅的独立客户端

通过 apollo 连接到 graphql-yoga 服务器进行订阅的正确方法是啥?

更新未使用的数据时,阿波罗本地状态是不是更新订阅者