如何使用 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 在后台执行查询?的主要内容,如果未能解决你的问题,请参考以下文章
如何在查询 onClick 后更新查询 props.data