我正在使用 apollo-client , apollo-link 和 react-apollo ,我想完全禁用缓存,但不要我知道该怎么做。
我读了apollo-cache-inmemory
的来源,它的构造函数中有一个config
参数,但是我无法构建一个虚拟storeFactory
来使它工作。
答案 0 :(得分:22)
实际上,将fetchPolicy
设置为network-only
"still saves the response to the cache for later use, bypassing the reading and forcing a network request"。
如果您确实要禁用缓存,请阅读和并使用no-cache
。
看看官方文档:https://www.apollographql.com/docs/react/advanced/caching.html#ignore
答案 1 :(得分:21)
您可以像这样设置defaultOptions
给您的客户:
const 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
,因为network-only
避免使用缓存。
请参阅https://www.apollographql.com/docs/react/advanced/caching#ignore
答案 2 :(得分:3)
我总是建议不要从apollo客户端禁用内置缓存功能。相反,您始终可以为单个查询设置fetchPolicy: 'network-only'
。
像这样
<Query
query={GET_DOG_PHOTO}
variables={{ breed }}
fetchPolicy='network-only'
>
{({ loading, error, data, refetch, networkStatus }) => {
...
}}
</Query>
使用此查询获取数据时,它始终会发出网络请求,而不是先从缓存中读取。