如何在 apollo-link 或 apollo-client 中禁用缓存?

How to disable cache in apollo-link or apollo-client?

我正在使用 apollo-clientapollo-linkreact-apollo,我想完全禁用缓存,但不知道该怎么做。

我阅读了 apollo-cache-inmemory 的源代码,它的构造函数中有一个 config 参数,但我无法构建虚拟 storeFactory 来使其工作。

您可以像这样为您的客户端设置 defaultOptions

const defaultOptions: 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 因为 no-cache 避免使用缓存。

https://www.apollographql.com/docs/react/api/core/ApolloClient/#defaultoptions

其实把fetchPolicy设置成network-only还是把response保存到缓存中备用,绕过读取强制网络请求

如果真的要禁用缓存,读写,使用no-cache。这是"similar to network-only, except the query's result is not stored in the cache."

看看官方文档:https://www.apollographql.com/docs/react/data/queries/#configuring-fetch-logic

我总是建议不要禁用 apollo 客户端的内置缓存功能。相反,您始终可以为单个查询设置 fetchPolicy: 'network-only'。 像这样

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

在使用此 Query 获取数据时,它总是会进行网络请求,而不是先从缓存中读取。