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

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

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

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

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

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

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

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

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

谢谢

【问题讨论】:

    标签: reactjs react-native apollo react-apollo


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-10-07
      • 2020-02-05
      • 2022-06-20
      • 1970-01-01
      • 2013-01-24
      • 2020-11-29
      • 1970-01-01
      • 2017-02-28
      • 2016-08-21
      相关资源
      最近更新 更多