图形 |阿波罗客户端 |如何更改现有订阅中的变量?
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-apollo
的Subscription
组件处理它的方式。如果您碰巧已经在使用 React,我强烈建议您使用可用的组件,而不是尝试重新发明***。
【讨论】:
嘿丹尼尔,感谢您的指点。我确实看过那段代码,但我错过了 endSubscription 部分。我们正在尝试在现有的 React 应用程序中添加这种支持,该应用程序已经具有 Web 套接字支持和使用 Mobx 的状态管理。当前目标是增量添加 Graphql。以上是关于图形 |阿波罗客户端 |如何更改现有订阅中的变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 apollo ios 客户端实现 graphql 订阅
如何在 apollo 客户端中检测订阅(websocket)的断开和重新连接