7

useQuery像这样使用 Hook:


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

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

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

我有一个用于处理状态的全局减速器,Baz我对其进行了如下修改:

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

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

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

4

2 回答 2

10

startPolling您可以使用 useQuery 挂钩返回的和stopPolling函数动态启动和停止轮询。有关更多信息,您可以在此处查看文档。

于 2019-11-02T20:44:54.327 回答
8

这是一个代码示例:

const { loading, error, data, startPolling, stopPolling } = useQuery(GET_DELIVERIES_QUERY)

 useEffect(() => {
     startPolling(5000)
   return () => {
    stopPolling()
   }
 }, [startPolling, stopPolling])
于 2021-02-26T15:23:47.540 回答