Проверить существующий экземпляр ApolloClient для очистки кэша? - PullRequest
1 голос
/ 20 апреля 2020

У нас есть приложение React / GraphQL внутри основного "приложения". Когда пользователь выходит из системы, мы хотим очистить кеш GQL. Однако функция выхода из системы существует в приложении-оболочке, а не в приложении React.

При повторном входе в кеш не очищается, что необходимо решить. Несколько вопросов о том, как решить эту проблему:

1) можем ли мы проверить наличие кэша, когда приложение React пытается создать новый экземпляр? Можно ли добавить флаг «версия»?

const client = new ApolloClient({
  link: authLink.concat(restLink),
  cache: () => {
    if (client.cache) {
      client.cache.reset()
    }
    return new InMemoryCache();
  }
});

2) или мы можем найти существующее клиентское приложение через любое другое окно или глобальный объект? 3) должно ли приложение реагировать установить клиент как часть локального состояния, а затем сравнить клиента с useRef, возможно? Если они не совпадают, сбросить?

Открыть для предложений ...

1 Ответ

1 голос
/ 21 апреля 2020

Официальным способом очистки кэша является вызов resetStore в экземпляре клиента. Вы можете получить экземпляр клиента внутри любого компонента в контексте Apollo, используя, например, useApolloClient hook

function MyLogoutButton() {
  const client = useApolloClient();
  const onLogout = () => {
    backend.logout();
    client.resetStore();
  };
  return <button onClick={onLogout}>Logout</button>;
}

Может быть, это делает то, что вы хотите сделать. Кажется, вы пытаетесь создать новый экземпляр клиента, но это не нужно. Метод resetStore был создан именно для этого варианта использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...