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

Posted

技术标签:

【中文标题】如何在 Apollo 中打开和关闭轮询?【英文标题】:How to switch polling on and off in 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 查询的轮询?

【问题讨论】:

【参考方案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,它将永远不会停止!您的代码仅在该组件可见时才能完美运行。

以上是关于如何在 Apollo 中打开和关闭轮询?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不轮询内核的情况下监控 C 程序中的 NIC 状态(启动/关闭)?

如何在突变之前更新 apollo 缓存状态,以进行 Like、Upvote 等操作? [关闭]

js如何实现父窗口前端显示,如果父窗口关闭则重新打开

阿波罗单一事实来源

Apollo 8 — ConfigService 异步轮询接口的实现

如何在 Apollo 中关闭 GraphQL 订阅的套接字连接