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 请求

Apollo GraphQL技术栈概览:如何将所有的功能组合起来

如何将数据从反应组件传递到 Apollo graphql 查询?