web-dev-qa-db-ja.com

apollo-linkまたはapollo-clientでキャッシュを無効にする方法は?

apollo-clientapollo-link、およびreact-apolloを使用しています。キャッシュを完全に無効にしたいのですが、方法がわかりませんそれをするために。

apollo-cache-inmemoryのソースを読みましたが、コンストラクタにconfig引数がありますが、ダミーのstoreFactoryを作成して機能させることはできません。

28
Jacky Lee

次のように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 as network-onlyは、キャッシュの使用を回避します。

https://www.apollographql.com/docs/react/advanced/caching#ignore を参照してください

34
Irvin Chan

実際、fetchPolicynetwork-onlyに設定すると、 「読み取りをバイパスしてネットワーク要求を強制する」ために、後で使用するために応答がキャッシュに保存されます

本当にキャッシュを無効にしたい場合は、読み取りおよび書き込み、no-cacheを使用します。

公式ドキュメントをご覧ください: https://www.apollographql.com/docs/react/advanced/caching.html#ignore

34
duske

私は常に、Apolloクライアントからの組み込みキャッシュ機能を無効にしないことをお勧めします。代わりに、個々のクエリに対して常にfetchPolicy: 'network-only'を設定できます。このようなもの

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

このクエリを使用してデータを取得する際、最初にキャッシュから読み取るのではなく、常にネットワーク要求を実行します。

5
Anuj