如何在 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}
</>
);
}
现在,Bar
和 Baz
使用相同的查询。 Baz
是一个边栏,我想在它处于活动状态时禁用轮询。
我有一个全局 reducer 用于处理 Baz
的状态,我将其修改为:
if (isSidebarOpen === false) {
...
apolloClient.stop();
} else {
// TODO
}
这会停止轮询,但我不知道如何在侧边栏关闭时重新激活它(即,在上面的 else
块中)。
我这样做正确吗?是否有不同的方式来切换 GraphQL 查询与 Apollo 的轮询?
您可以使用 useQuery 挂钩返回的 startPolling
和 stopPolling
函数动态启动和停止轮询。有关详细信息,您可以查看文档 here.
这是一个代码示例:
const { loading, error, data, startPolling, stopPolling } = useQuery(GET_DELIVERIES_QUERY)
useEffect(() => {
startPolling(5000)
return () => {
stopPolling()
}
}, [startPolling, stopPolling])
我这样使用 useQuery
挂钩:
function Foo() {
const { data, error, loading } = useQuery(MY_QUERY, { pollInterval: 1000 });
return (
<>
<Bar/>
<Baz/>
{data}
</>
);
}
现在,Bar
和 Baz
使用相同的查询。 Baz
是一个边栏,我想在它处于活动状态时禁用轮询。
我有一个全局 reducer 用于处理 Baz
的状态,我将其修改为:
if (isSidebarOpen === false) {
...
apolloClient.stop();
} else {
// TODO
}
这会停止轮询,但我不知道如何在侧边栏关闭时重新激活它(即,在上面的 else
块中)。
我这样做正确吗?是否有不同的方式来切换 GraphQL 查询与 Apollo 的轮询?
您可以使用 useQuery 挂钩返回的 startPolling
和 stopPolling
函数动态启动和停止轮询。有关详细信息,您可以查看文档 here.
这是一个代码示例:
const { loading, error, data, startPolling, stopPolling } = useQuery(GET_DELIVERIES_QUERY)
useEffect(() => {
startPolling(5000)
return () => {
stopPolling()
}
}, [startPolling, stopPolling])