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

Lir*_*anC 4 javascript apollo apollo-client

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

我的环境:

  • 阿波罗升压 0.4.3
  • 图 14.1.1
  • apollo-link-batch-http - 1.2.12

现在,这就是我配置我的ApolloClient.

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

我在文档中看到的最接近的事情是FetchOptions......但它没有指定我实际上可以传递哪些选项来实现我禁用或限制缓存的需要。

Dan*_*den 7

这对于 Apollo Boost 来说是不可能的。您需要迁移以迁移到使用 Apollo Client。这将允许您为构造函数提供一个defaultOptions选项,ApolloClient文档中所示

const defaultOptions = {
  watchQuery: {
    fetchPolicy: 'no-cache',
  },
  query: {
    fetchPolicy: 'no-cache',
  },
}
Run Code Online (Sandbox Code Playgroud)

fetchPolicy选项实际上可以在每个单独的query调用或Query组件上设置——通过提供一个defaultOptions对象,您不必no-cacheQuery您使用的每个单独的组件上指定获取策略。这也意味着如果您一心想要保持 Boost,您可以在每个组件上都这样做。但是,以上是如何有效地“关闭”整个客户端的缓存。


Ran*_*iys 6

也许有人想知道如何禁用缓存 apollo-boost准确ApolloClient 的,那么我们来谈谈它。

@Daniel 说的是真的,我们不能在直接执行new ApolloClientof时禁用缓存apollo-boost,但是我们可以fetchPolicy在发出请求时进行设置。代码如下:

  // 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'
  })
Run Code Online (Sandbox Code Playgroud)

fetchPolicy您可以从那里找到有效值。