如何在 apollo-link 或 apollo-client 中禁用缓存?
How to disable cache in apollo-link or apollo-client?
我正在使用 apollo-client、apollo-link 和 react-apollo,我想完全禁用缓存,但不知道该怎么做。
我阅读了 apollo-cache-inmemory
的源代码,它的构造函数中有一个 config
参数,但我无法构建虚拟 storeFactory
来使其工作。
您可以像这样为您的客户端设置 defaultOptions
:
const defaultOptions: 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
因为 no-cache
避免使用缓存。
见https://www.apollographql.com/docs/react/api/core/ApolloClient/#defaultoptions
其实把fetchPolicy
设置成network-only
还是把response保存到缓存中备用,绕过读取强制网络请求
如果真的要禁用缓存,读和写,使用no-cache
。这是"similar to network-only, except the query's result is not stored in the cache."
看看官方文档:https://www.apollographql.com/docs/react/data/queries/#configuring-fetch-logic
我总是建议不要禁用 apollo 客户端的内置缓存功能。相反,您始终可以为单个查询设置 fetchPolicy: 'network-only'
。
像这样
<Query
query={GET_DOG_PHOTO}
variables={{ breed }}
fetchPolicy='network-only'
>
{({ loading, error, data, refetch, networkStatus }) => {
...
}}
</Query>
在使用此 Query 获取数据时,它总是会进行网络请求,而不是先从缓存中读取。
我正在使用 apollo-client、apollo-link 和 react-apollo,我想完全禁用缓存,但不知道该怎么做。
我阅读了 apollo-cache-inmemory
的源代码,它的构造函数中有一个 config
参数,但我无法构建虚拟 storeFactory
来使其工作。
您可以像这样为您的客户端设置 defaultOptions
:
const defaultOptions: 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
因为 no-cache
避免使用缓存。
见https://www.apollographql.com/docs/react/api/core/ApolloClient/#defaultoptions
其实把fetchPolicy
设置成network-only
还是把response保存到缓存中备用,绕过读取强制网络请求
如果真的要禁用缓存,读和写,使用no-cache
。这是"similar to network-only, except the query's result is not stored in the cache."
看看官方文档:https://www.apollographql.com/docs/react/data/queries/#configuring-fetch-logic
我总是建议不要禁用 apollo 客户端的内置缓存功能。相反,您始终可以为单个查询设置 fetchPolicy: 'network-only'
。
像这样
<Query
query={GET_DOG_PHOTO}
variables={{ breed }}
fetchPolicy='network-only'
>
{({ loading, error, data, refetch, networkStatus }) => {
...
}}
</Query>
在使用此 Query 获取数据时,它总是会进行网络请求,而不是先从缓存中读取。