禁用从 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-boost
的new 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 中的缓存的主要内容,如果未能解决你的问题,请参考以下文章