Как отключить кеш в apollo-link или apollo-client?

Я использую apollo-client, apollo-link и response-apollo, я хочу полностью отключить кеш, но не знаю, как это сделать.

Я прочитал источник apollo-cache-inmemory, у него есть аргумент config в его конструкторе, но я не могу создать фиктивный storeFactory чтобы он работал.

Ответы

Ответ 1

Вы можете установить defaultOptions для вашего клиента следующим образом:

const defaultOptions = {
      watchQuery: {
        fetchPolicy: 'no-cache',
        errorPolicy: 'ignore',
      },
      query: {
        fetchPolicy: 'no-cache',
        errorPolicy: 'all',
      },
    }

const client = new ApolloClient({
    link: concat(authMiddleware, httpLink),
    cache: new InMemoryCache(),
    defaultOptions: defaultOptions,

});

fetchPolicy только для network-only избегает использования кеша.

См. Https://www.apollographql.com/docs/react/advanced/caching#ignore.

Ответ 2

Фактически, установка fetchPolicy для network-only "все еще сохраняет ответ в кэш для последующего использования, минуя чтение и форсирование сетевого запроса".

Если вы действительно хотите отключить кеш, читать и писать, используйте no-cache.

Посмотрите официальные документы: https://www.apollographql.com/docs/react/advanced/caching.html#ignore

Ответ 3

Я бы всегда предлагал не отключать встроенную функцию кэширования в клиенте apollo. Вместо этого вы всегда можете установить fetchPolicy: 'network-only' для fetchPolicy: 'network-only' для отдельных запросов. Что-то вроде этого

<Query
    query={GET_DOG_PHOTO}
    variables={{ breed }}
    fetchPolicy='network-only'
>
 {({ loading, error, data, refetch, networkStatus }) => {
   ...
 }}
</Query>

При получении данных с помощью этого запроса он всегда будет выполнять сетевой запрос, а не сначала читать из кэша.