Usage > Polling: re-fetching data on a timer">Usage > Polling: re-fetching data on a timer">
跳至主要内容

轮询

轮询概述

轮询使您能够通过以指定的时间间隔运行查询来实现“实时”效果。要为查询启用轮询,请将 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 }) => {
// Automatically refetch every 3s unless the window is out of focus
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 ref 上调用updateSubscriptionOptions来更新间隔。这种方法因框架而异,但在任何地方都是可能的。请参阅Svelte 示例了解一种可能性,以及没有 React Hooks 的使用页面以获取有关手动处理订阅的更多详细信息。

queryRef.updateSubscriptionOptions({ pollingInterval: 0 })

轮询示例