React Native中React Query useQuery的staleTime未按预期触发接口请求
核心原因
你对React Query(TanStack Query)中staleTime参数的作用存在误解,这个参数不是用来设置接口定时轮询间隔的,自然无法实现每秒自动调用接口的效果。
参数作用说明
staleTime的实际作用是:标记请求返回的缓存数据为「新鲜状态」的时长,单位为毫秒。你配置的staleTime: 1000仅代表:接口请求成功后,1秒内这份缓存会被判定为新鲜,期间不会触发任何自动重拉;1秒后缓存被标记为「陈旧」,但也只有满足React Query默认的重拉触发条件时,才会重新发起请求。- React Query默认触发陈旧数据重拉的场景只有这几种:
- 绑定该Query的组件重新挂载
- 应用从后台切回前台、获得焦点
- 设备网络断开后重新连接
- 代码中手动调用
refetch方法触发重拉 - 配置了定时轮询参数
实现每秒请求的正确方式
要达到每秒自动调用接口的效果,你需要使用专门控制轮询间隔的refetchInterval参数,修正后的useQuery配置示例如下:
const {data} = useQuery('getReservations', getReservations, { staleTime: 1000, refetchInterval: 1000, // 轮询间隔,单位毫秒,设置为1000即每秒发起一次请求 refetchIntervalInBackground: true, // 可选配置:应用在后台运行时也保持轮询 });
内容的提问来源于stack exchange,提问作者Mimmo
相关产品推荐
相关产品推荐

