Можете ли вы получить доступ к «клиенту» в клиентском распознавателе в ApolloClient вместо «кэша»? - PullRequest
2 голосов
/ 08 июля 2019

Можно ли получить доступ к client из решателя ApolloClient, а не cache?

Я пытаюсь написать распознаватель, который очищает localStorage и кэш при нажатии кнопки (по сути, выход из системы), но не знаю, как получить доступ к клиенту.

У меня нет проблем с доступом к кешу, но, несмотря на официальные документы, я получаю cache.resetStore() - это не ошибка функции в консоли (или cache.clearStore() if I use that function).

Запуск ApolloClient, React и apollo-link-state, упаковка компонентов в graphql() HOC с compose.

resolvers.js

  Mutation: {
    logout: (_, __, { cache }) => {
      localStorage.clear();
      cache.writeData({
        data: {
          AuthData: {
            __typename: 'AuthData',
            token: null,
            currentUserId: null,
            expirationTime: null
          }
        }
      });
    }
  }
};

index.js

import ReactDOM from 'react-dom';
import App from './App';
import { BrowserRouter } from 'react-router-dom';

//Apollo
import { ApolloProvider } from 'react-apollo';
import { ApolloClient } from 'apollo-client';
import { ApolloLink } from 'apollo-link';
import { createHttpLink } from 'apollo-link-http';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { withClientState } from 'apollo-link-state';
import { resolvers } from './resolvers';

const cache = new InMemoryCache();

...
...

const initialState = {
  AuthData: {
    __typename: 'AuthData',
    token: localStorage.getItem('token') || null,
    currentUserId: localStorage.getItem('currentUserId') || null,
    expirationTime: localStorage.getItem('expirationTime') || null
  },
  ErrorLog: {
    __typename: 'ErrorLog',
    errors: []
  }
};

const stateLink = withClientState({
  cache,
  defaults: initialState,
  resolvers
});

const link = ApolloLink.from([stateLink, httpLink]);

const client = new ApolloClient({
  link,
  cache
});

Ожидаемый:

  • Кэш клиента должен быть очищен от всех данных.

Фактический:

  • Получение ошибки client is not defined или cache.resetStore() не является функцией.
...