图形数据库 |阿波罗客户端 |如何更改现有订阅中的变量?
Graphql | Apollo client | How to change variables in existing subscription?
我已经设置了带有订阅的 Apollo 服务器和客户端。在基本设置中一切都按预期工作。我正在使用 Apollo Client 的 Subscribe 方法进行订阅。如下所示:
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 回调触发了事件。
问题 - 在我们的应用程序中,订阅过滤器是动态的,用户可以 select 不同的值,这将影响过滤器。我浏览了文档和许多(许多)文章,但找不到更新过滤器的方法或如何处理此用例?
期望 - 一旦用户 select 设置了任何值并应用过滤器,我想更新我在服务器上的订阅以开始使用新过滤器?
订阅一旦创建,您将无法修改。当过滤器更改时,您需要在当前 Observer
上调用 unsubscribe
,然后通过使用更新后的变量调用 subscribe
方法来创建新的 Observer
。如果您查看 the source code,这就是 react-apollo
的 Subscription
组件处理它的方式。如果您碰巧已经在使用 React,我强烈建议您使用可用的组件,而不是试图重新发明轮子。
我已经设置了带有订阅的 Apollo 服务器和客户端。在基本设置中一切都按预期工作。我正在使用 Apollo Client 的 Subscribe 方法进行订阅。如下所示:
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 回调触发了事件。
问题 - 在我们的应用程序中,订阅过滤器是动态的,用户可以 select 不同的值,这将影响过滤器。我浏览了文档和许多(许多)文章,但找不到更新过滤器的方法或如何处理此用例?
期望 - 一旦用户 select 设置了任何值并应用过滤器,我想更新我在服务器上的订阅以开始使用新过滤器?
订阅一旦创建,您将无法修改。当过滤器更改时,您需要在当前 Observer
上调用 unsubscribe
,然后通过使用更新后的变量调用 subscribe
方法来创建新的 Observer
。如果您查看 the source code,这就是 react-apollo
的 Subscription
组件处理它的方式。如果您碰巧已经在使用 React,我强烈建议您使用可用的组件,而不是试图重新发明轮子。