如何使用 Apollo 在后台执行查询?

Posted

技术标签:

【中文标题】如何使用 Apollo 在后台执行查询?【英文标题】:How to execute a query in the background with Apollo? 【发布时间】:2021-01-09 12:44:39 【问题描述】:

我们正在将 Apollo 添加到使用 React-Native 构建的现有移动应用中。

今天我们使用 Redux-Saga 来调度动作和执行后台请求,有时由于技术原因会有一定的延迟。我们想对 Apollo 客户端做同样的事情。

鉴于 Apollo 客户端的机制,每当组件被卸载时,从带有 setTimeout 的屏幕执行重新获取 useQuery 以添加 5-10 秒的延迟可能会中断。虽然,我们仍然希望执行重新获取,但稍后,即使我在完全不同的屏幕上。

目前,当我在未安装的屏幕上尝试重新获取时出现以下错误:

TypeError - undefined 不是一个对象(评估 'c.currentObservable.query.refetch')

我正在寻找一种在后台延迟重新获取数据的解决方案。一旦获取成功,它将使用相同的查询更新所有组件。

几乎就像将指令添加到需要稍后执行的队列中。

我正在考虑使用全局上下文来执行这些,但我不确定这是正确的解决方案,我想知道是否有人有这种用例以及他们如何解决它们?

谢谢

【问题讨论】:

【参考方案1】:

使用 react,如果您尝试在未安装的组件上执行任何操作,它总是会出错。这是组件行为,并非特定于 apollo 客户端。

在 10 秒后执行重新获取似乎不是正确的方法,因为由于用户操作,组件可能会在 10 秒内进入卸载状态。

您可以使用 apollo 客户端在组件外部执行查询,类似于使用 axios 的方式,甚至可以与 redux-saga 一起使用。

apolloClient
  .query(
     query: QUERY,
     fetchPolicy: 'no-cache',
  )
  .then (res => )
  .catch(err => )

【讨论】:

以上是关于如何使用 Apollo 在后台执行查询?的主要内容,如果未能解决你的问题,请参考以下文章

Apollo 客户端:如何对自定义事件执行查询

如何在查询 onClick 后更新查询 props.data

如何使用 useLazyQuery() 在每次点击时执行查询

如何将graphql查询的结果作为文件发送?

React Apollo:如何在多个地方使用相同查询的结果

使用 nuxt-apollo 时如何使用 GraphQL 查询?