轮询
轮询概述
轮询使你能够通过使查询以指定的间隔运行来实现“实时”效果。要为查询启用轮询,将 pollingInterval
传递给 useQuery
钩子或动作创建器,并以毫秒为单位设置间隔:
提示
轮询还具有在窗口失去焦点时跳过发送请求的能力。要启用此行为,将 skipPollingIfUnfocused: true
传递给 useQuery
钩子或动作创建器。
注意:skipPollingIfUnfocused
需要 setupListeners
已经被调用。
src/Pokemon.tsx
import * as React from 'react'
import { useGetPokemonByNameQuery } from './services/pokemon'
export const Pokemon = ({ name }: { name: string }) => {
// 自动每3秒重新获取一次,除非窗口失去焦点
const { data, status, error, refetch } = useGetPokemonByNameQuery(name, {
pollingInterval: 3000,
skipPollingIfUnfocused: true,
})
return <div>{data}</div>
}
在没有 React Hooks 的动作创建器中:
const { data, status, error, refetch } = store.dispatch(
endpoints.getCountById.initiate(id, {
subscriptionOptions: { pollingInterval: 3000 },
}),
)
不使用 React Hooks 的轮询
如果你在没有 React Hooks 的便利性的情况下使用轮询,你将需要手动在 promise 引用上调用 updateSubscriptionOptions
来更新间隔。这种方法因框架而异,但在任何地方都是可能的。参见 Svelte 示例 以了解一种可能性,以及 不使用 React Hooks 的使用方法 页面以获取更多关于手动处理订阅的详细信息。
queryRef.updateSubscriptionOptions({ pollingInterval: 0 })