You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React组件内useQuery钩子持续触发执行问题咨询

useQuery持续触发请求的问题原因及修复方案

核心错误原因

你代码中最根本的问题是 useQuery 第二个参数的用法不符合规范:React Query要求第二个参数是待执行的异步函数本身,而你当前写的是 GET_DATA(token),相当于组件每次渲染时都会直接执行这个接口请求函数,自然会触发无限调用。

修复步骤

  • 第一步:调整useQuery的传参写法,用匿名函数包裹接口调用,把执行权交给React Query控制:
import { GET_DATA } from 'apiCalls';
const { loading, error, data } = useQuery('getData', () => GET_DATA(token));
  • 第二步(可选但推荐):如果token是会动态变化的变量,需要把变量放到查询键数组中,React Query会根据查询键做缓存匹配,只有查询键变化时才会重新发起请求:
const { loading, error, data } = useQuery(['getData', token], () => GET_DATA(token));
  • 第三步:修正接口请求的错误处理逻辑,你当前在catch块中直接返回错误对象,会让React Query判定为请求成功,不符合错误状态的预期,也可能间接导致异常重查,建议改为抛出错误让React Query接管错误逻辑:
export const GET_DATA = async (token) => {
  try {
      const res = await axios.get(`${process.env.REACT_APP_SERVER}/api/...`, {
          headers: {'auth-token': token},
      });
      console.log(res);
      return res.data;
  } catch (err) {
      console.log('Error getting data');
      throw err;
  }
}
  • 第四步(额外排查):如果调整完以上写法还是有重复请求,可以检查React Query的全局配置,是否设置了过短的refetchInterval、staleTime设为0导致页面聚焦/组件挂载时自动重查,按需调整对应配置即可。

内容的提问来源于stack exchange,提问作者SDB_1998

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 01:45:00