我正在寻找一种解决方案,可以在应用程序启动时将订阅添加到特定路由,而不是在全局范围内绑定订阅。
我知道可以通过以下代码实现订阅
const wsLink = new WebSocketLink({
uri: `ws://localhost:4000`,
options: {
reconnect: true,
connectionParams: {
authToken: localStorage.getItem(AUTH_TOKEN),
}
}
})
const link = split(
({ query }) => {
const { kind, operation } = getMainDefinition(query)
return kind === 'OperationDefinition' && operation === 'subscription'
},
wsLink,
authLink.concat(httpLink)
)
const client = new ApolloClient({
link,
cache: new InMemoryCache()
})
但是,如果添加此选项,则无论页面位于哪个页面,订阅都将在页面加载时直接激活。
有什么解决方案可以将订阅绑定在特定页面上,而不是全局绑定。
答案 0 :(得分:0)
如果您要在查询参数中传递令牌,并且想要重新连接到链接,您所需要做的就是通过重新分配链接来更新链接
wsLink.subscriptionClient.url = `${GraphQLSocketURL}/query?authorization=${newAccessToken}`;
如果要在加载页面时建立连接,则只需将惰性标志设置为true
const wsLink = new WebSocketLink({
uri: `${GraphQLSocketURL}/query?authorization=${accessToken}`,
options: {
reconnect: true,
reconnectionAttempts: 10,
lazy: true,
},
});