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

Posted

技术标签:

【中文标题】禁用从 apollo-boost 导出的 ApolloClient 中的缓存【英文标题】:Disabling Cache in ApolloClient exported from apollo-boost 【发布时间】:2019-12-05 22:33:20 【问题描述】:

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

我的环境:

apollo-boost 0.4.3 graphql 14.1.1 apollo-link-batch-http - 1.2.12

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

new ApolloClient(
      s-s-rMode: true,
      cache: new InMemoryCache(),
      link: WithApollo.BatchLink(),
      credentials: 'same-origin',
    );

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

【问题讨论】:

fetchPolicy 之一是no-cache 有一个network-only 选项(但仍会写入缓存)。我不确定这是否是每个查询... @Intellidroid 你确定这个选项对apollo-boost 有效吗?它对我不起作用,并且此链接中未提及 fetchPolicy:apollographql.com/docs/react/essentials/get-started/… 【参考方案1】:

这在 Apollo Boost 中是不可能的。您需要迁移到migrate to using Apollo Client。这将允许您为您的ApolloClient 构造函数提供defaultOptions 选项作为shown in the docs:

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

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

【讨论】:

【参考方案2】:

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

@Daniel 说的是真的,当我们直接做apollo-boostnew ApolloClient 时我们不能禁用缓存,但是我们可以在发出请求时设置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'
  )

您可以从there 中找到fetchPolicy 的有效值。

【讨论】:

以上是关于禁用从 apollo-boost 导出的 ApolloClient 中的缓存的主要内容,如果未能解决你的问题,请参考以下文章

来自 apollo-boost 的 ApolloClient 试图分配给只读属性

Apollo-boost 缓存问题

在 Access 2007 CSV 导出中:禁用科学记数法

使用 apollo-boost 持久化缓存

从 Grafana 中的图形禁用查看、共享和更多菜单

从 PHPMYADMIN 导出和导入数据