GraphQL + Apollo - 如何强制进行查询,似乎正在缓存一些东西
Posted
技术标签:
【中文标题】GraphQL + Apollo - 如何强制进行查询,似乎正在缓存一些东西【英文标题】:GraphQL + Apollo - How to forcefully make the query, appears something is being cached 【发布时间】:2020-03-13 00:22:52 【问题描述】:我在我的 React 应用中使用 ApolloClient。
我有一个使用 Spring Boot 运行的 GraphQL 服务器。
我注意到一个问题,即每当我的查询选项(在variables
中设置)相同时,它实际上并没有进行查询/调用 GraphQL 服务器,而是似乎使用来自缓存。
由于数据可能已更改,我该如何强制它实际进行搜索?
这是我在前端调用 get
函数的服务 - 我希望有像 forceRefetch: true
这样的选项:
return graphQLClient
.query<MultipleSongsQueryResult>(
query: GET_SONGS,
variables: options,
)
.then(response => response.data);
谢谢。
【问题讨论】:
【参考方案1】:Apollo 客户端的默认获取策略是cache-first
,所以如果你进行两次相同的查询,第一次 Apollo 会从数据库中获取数据,第二次会从本地缓存中获取数据(这就是您的情况似乎正在发生的事情)。
如果您希望始终从服务器获取数据,您可以将 fetch-policy
更改为 network-only
,例如。
这可能会帮助您确定哪种获取策略更适合您:https://www.apollographql.com/docs/react/api/react-apollo/#optionsfetchpolicy。
此外,如果您使用突变更改数据,您可以使用refetchQueries
选项从服务器重新加载数据:https://www.apollographql.com/docs/react/data/queries/#updating-cached-query-results。
【讨论】:
以上是关于GraphQL + Apollo - 如何强制进行查询,似乎正在缓存一些东西的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 react-apollo 使用相同的查询进行多个 graphql 查询?
如何使用 apollo / graphql 实现节点查询解析器
如何使用 Apollo 从 GraphQL Mutation 设置 Auth token cookie
如何调试 nuxt-apollo 服务器端 graphql 请求