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