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

React Query useQuery钩子无数据返回,但API请求正常问题求助

React Query useQuery 无法获取返回数据的解决办法

你代码里的核心问题是useQuery的回调函数没有返回异步请求的Promise。虽然listofgroupsapi本身能正常发起请求并打印数据,但你在useQuery里调用它时,没有把这个异步函数的返回值(Promise)传递给useQuery,导致React Query无法追踪请求的完成状态,自然不会更新data和isLoading状态。

修复步骤

  1. 让useQuery拿到异步请求的Promise
    你需要在回调函数里返回listofgroupsapi的调用结果,有两种写法:

    // 写法1:显式return
    const { isLoading, data } = useQuery("groups", () => {
      return listofgroupsapi(lastId, limit, id);
    });
    
    // 写法2:箭头函数隐式返回(更简洁)
    const { isLoading, data } = useQuery("groups", () => listofgroupsapi(lastId, limit, id));
    
  2. 优化查询键(可选但重要)
    把所有影响请求结果的参数(lastId、limit、id)加入查询键数组,这样当这些参数变化时,React Query会自动重新发起请求:

    const { isLoading, data } = useQuery(
      ["groups", lastId, limit, id], // 包含所有依赖的查询键
      () => listofgroupsapi(lastId, limit, id)
    );
    

完整修复后的代码

const listofgroupsapi = async (lastId, limit, id) => {
  const res = await axios.get(
    `${apiURL}/groups/getAllGroups?lastId=${lastId}&limit=${limit}&id=${id}`
  );
  console.log(res.data);
  return res.data;
};

const Superadminpanel = () => {
  const [lastId, setLastId] = useState(0);
  const [limit, setLimit] = useState(10);
  const [id, setId] = useState(cookies.id);
  
  // 修正后的useQuery
  const { isLoading, data } = useQuery(
    ["groups", lastId, limit, id],
    () => listofgroupsapi(lastId, limit, id)
  );

  return (
    <div style={{ minHeight: "90vh" }}>
      <div>
        <h1>here we are</h1>
        {isLoading ? <h1>loading</h1> : <h1>not loading</h1>}
        {data ? <h1>data</h1> : <h1>no data:{data}</h1>}
      </div>
    </div>
  );
};

export default Superadminpanel;

额外检查点

  • 确认你的应用已经用QueryClientProvider包裹根组件,这是React Query生效的前提:
    import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
    
    const queryClient = new QueryClient();
    
    function App() {
      return (
        <QueryClientProvider client={queryClient}>
          <Superadminpanel />
        </QueryClientProvider>
      );
    }
    
  • 可以通过React Query DevTools查看查询状态:如果查询键配置正确,你能看到请求的状态变化和缓存的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:35:28