【问题标题】:How to switch polling on and off in Apollo?如何在 Apollo 中打开和关闭轮询?
【发布时间】:2020-02-28 14:41:04
【问题描述】:

我像这样使用useQuery Hook:


function Foo() {
  const { data, error, loading } = useQuery(MY_QUERY, { pollInterval: 1000 });

  return (
    <>
      <Bar/>
      <Baz/>
      {data}
    </>
  );
}

现在,BarBaz 都使用相同的查询。 Baz 是一个侧边栏,我想在轮询处于活动状态时禁用它。

我有一个全局减速器来处理Baz 的状态,我将其修改如下:

if (isSidebarOpen === false) {
  ...
  apolloClient.stop();
} else {
  // TODO
}

这会停止轮询,但我不知道如何在侧边栏关闭时重新激活它(即在上面的 else 块中)。

我这样做正确吗?是否有其他方法可以使用 Apollo 切换 GraphQL 查询的轮询?

【问题讨论】:

    标签: graphql apollo react-apollo apollo-client react-apollo-hooks


    【解决方案1】:

    您可以使用 useQuery 挂钩返回的 startPollingstopPolling 函数动态启动和停止轮询。更多信息,您可以查看文档here

    【讨论】:

      【解决方案2】:

      这是一个代码示例:

      const { loading, error, data, startPolling, stopPolling } = useQuery(GET_DELIVERIES_QUERY)
      
       useEffect(() => {
           startPolling(5000)
         return () => {
          stopPolling()
         }
       }, [startPolling, stopPolling])
      

      【讨论】:

      • 谢谢! Apollo 真的应该在他们的文档中添加,如果您将 pollInterval 添加到您的 useQuery,它将永远不会停止!您的代码仅在该组件可见时才能完美运行。
      猜你喜欢
      • 2019-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      相关资源
      最近更新 更多