Как отключить кеш в 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>
При получении данных с помощью этого запроса он всегда будет выполнять сетевой запрос, а не сначала читать из кэша.