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

时间:2017-12-19 02:00:04

标签: react-apollo

我正在使用 apollo-client apollo-link react-apollo ,我想完全禁用缓存,但不要我知道该怎么做。

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

3 个答案:

答案 0 :(得分:22)

实际上,将fetchPolicy设置为network-only "still saves the response to the cache for later use, bypassing the reading and forcing a network request"

如果您确实要禁用缓存,请阅读并使用no-cache

看看官方文档:https://www.apollographql.com/docs/react/advanced/caching.html#ignore

答案 1 :(得分:21)

您可以像这样设置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 :(得分:3)

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

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

使用此查询获取数据时,它始终会发出网络请求,而不是先从缓存中读取。