web-dev-qa-db-fra.com

Comment désactiver le cache dans apollo-link ou apollo-client?

J'utilise apollo-client, apollo-link et react-apollo, je veux désactiver complètement le cache, mais je ne sais pas comment. pour le faire.

J'ai lu la source de apollo-cache-inmemory, il a un argument config dans son constructeur, mais je ne peux pas construire de dummy storeFactory pour que cela fonctionne.

28
Jacky Lee

Vous pouvez définir defaultOptions sur votre client comme ceci:

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 comme network-only évite d'utiliser le cache.

Voir https://www.apollographql.com/docs/react/advanced/caching#ignore

34
Irvin Chan

En fait, mettre fetchPolicy à network-only"" enregistre toujours la réponse au cache pour une utilisation ultérieure, en ignorant la lecture et en forçant une requête réseau " .

Si vous voulez vraiment désactiver le cache, lisez et écrivez, utilisez no-cache.

Consultez la documentation officielle: https://www.apollographql.com/docs/react/advanced/caching.html#ignore

34
duske

Je conseillerais toujours de ne pas désactiver la fonctionnalité de mise en cache inbuild du client Apollo. Au lieu de cela, vous pouvez toujours définir fetchPolicy: 'network-only' pour une requête individuelle. Quelque chose comme ça

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

Lors de la récupération des données avec cette requête, une requête réseau serait toujours effectuée au lieu de lire d'abord dans le cache.

5
Anuj