Добавить контекстную ссылку на Apollo Link после создания клиента (после входа в систему) - PullRequest
0 голосов
/ 01 апреля 2020

Я хочу добавить контекстную ссылку в существующую цепочку ссылок Apollo.

Вот две проблемы GitHub, которые я прочитал: Первый , Второй .

Я не хочу использовать локальное хранилище для хранения токена, поскольку документы показывают здесь .

У меня есть поставщик аутентификации, который хранит мой токен. После сохранения моего токена я хотел бы добавить контекстную ссылку к ссылкам клиента Apollo

  const authLink = setContext((_, { headers }) => {
    const newHeaders = { ...headers };
    if (token) newHeaders.authorization = `Bearer ${token}`;

    return {
      headers: newHeaders,
    };
  });

Я знаю, что могу получить доступ к клиенту через useClient. Как добавить эту ссылку к клиенту, уже существующему из моего компонента, не делая этого до создания клиента?

link: authLink.concat(httpLink) или link: authLink.concat(whateverLinksApolloHas)

1 Ответ

0 голосов
/ 02 апреля 2020

Я не верю, что есть поддерживаемый способ делать то, что вы пытаетесь сделать. То, что вы можете сделать, это инициализировать новый экземпляр ApolloClient и передать его вместо ApolloProvider. Например:

const [token, setToken] = useState(null)
const client = getClient(token) // adds the appropriate links as necessary

return <ApolloProvider client={client}><App/></ApolloProvider>

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

Однако даже это, вероятно, излишне. Нет причины, по которой вы не всегда можете использовать setContext. Вы уже проверяете, существует ли токен перед изменением заголовков.

...