跳到主要内容

 

轮询

轮询概述

轮询使你能够通过使查询以指定的间隔运行来实现“实时”效果。要为查询启用轮询,将 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 })

轮询示例