如何在 Apollo 中打开和关闭轮询?

How to switch polling on and off in Apollo?

我这样使用 useQuery 挂钩:


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

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

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

我有一个全局 reducer 用于处理 Baz 的状态,我将其修改为:

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

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

我这样做正确吗?是否有不同的方式来切换 GraphQL 查询与 Apollo 的轮询?

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

这是一个代码示例:

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

 useEffect(() => {
     startPolling(5000)
   return () => {
    stopPolling()
   }
 }, [startPolling, stopPolling])