在从apollo-boost导出的ApolloClient中禁用缓存

时间:2019-07-28 09:00:55

标签: javascript apollo apollo-client

我想禁用缓存或将缓存限制为24小时。我的ApolloClient仅在服务器端运行。

我的环境:

  • 阿波罗助推器0.4.3
  • graphql 14.1.1
  • apollo-link-batch-http-1.2.12

现在,这就是我配置ApolloClient的方式。

new ApolloClient({
      ssrMode: true,
      cache: new InMemoryCache(),
      link: WithApollo.BatchLink(),
      credentials: 'same-origin',
    });

The closest thing I saw in docs is FetchOptions ...但是它没有指定我可以实际使用哪些选项来满足我禁用或限制缓存的需要。

2 个答案:

答案 0 :(得分:1)

使用Apollo Boost无法做到这一点。您需要迁移到migrate to using Apollo Client。这将使您可以为defaultOptions构造函数提供shown in the docsApolloClient选项:

const defaultOptions = {
  watchQuery: {
    fetchPolicy: 'no-cache',
  },
  query: {
    fetchPolicy: 'no-cache',
  },
}

实际上可以在每个单独的fetchPolicy调用或query组件上设置Query选项-通过提供defaultOptions对象,您不必指定{{1 }}作为您使用的每个单独no-cache组件的提取策略。这也意味着,如果您打算保留Boost,可以在每个组件上进行。但是,以上是如何有效地“关闭”整个客户端的缓存。

答案 1 :(得分:1)

也许有人想知道如何确切地禁用apollo-boost ApolloClient的缓存,所以让我们来谈谈。

@Daniel说的是事实,我们不能直接执行new ApolloClient的{​​{1}}时禁用缓存,但是可以在发出请求时设置apollo-boost。代码如下:

fetchPolicy

您可以从there中找到 // create client first import ApolloClient from "apollo-boost"; const client = new ApolloClient({ uri: GRAPHQL_URL }) // Set the fetchPolicy when we send request import { gql } from 'apollo-boost'; client.query({ query: gql` query someInfo($id: ID!) { info(id: $id) { id name } }`, variables:{id: '123'}, fetchPolicy: 'no-cache' }) 的有效值。