Добавить подписку на определенный маршрут в клиентском приложении apollo GraphQL React - PullRequest
0 голосов
/ 01 октября 2019

Я ищу решение, в котором я могу добавить подписку к определенному маршруту вместо глобальной привязки подписки при запуске приложения.

Я знаю, что подписку можно получить с помощью следующего кода

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()
})

Но если я добавлю это, подписка будет активна сразу после загрузки страницы, независимо от того, на какой странице я нахожусь.

Есть ли какое-либо решение, где я могу вместо этого связать подписку на определенной страницео том, что это связано во всем мире.

1 Ответ

0 голосов
/ 03 октября 2019

Если вы передаете токен в параметре запроса и хотите повторно подключиться к ссылке, все, что вам нужно сделать, это обновить ссылку, переназначив ее

wsLink.subscriptionClient.url = `${GraphQLSocketURL}/query?authorization=${newAccessToken}`;

И если вы хотите установить соединение, когдастраница загружается, все что вам нужно сделать, это установить флаг lazy на true

const wsLink = new WebSocketLink({
  uri: `${GraphQLSocketURL}/query?authorization=${accessToken}`,
  options: {
    reconnect: true,
    reconnectionAttempts: 10,
    lazy: true,
  },
});
...