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

使用React Query获取数据返回undefined的问题排查求助

React Query 获取数据返回undefined的问题排查与解决

问题核心原因及修复步骤:

  1. useQuery 返回值解构错误
    React Query的useQuery钩子默认返回的结果对象中,数据对应的字段是data,不是自定义的produktet。你需要解构data并按需重命名:
const { data: produktet } = useQuery({
  queryKey: ["gjerat"],
  queryFn: () => {
    return Axios.get("http://localhost:3500/dat").then((res) => res.data);
  },
});
  1. 违反React钩子调用规则
    useQuery作为React钩子,必须在组件函数的顶级作用域内调用,不能直接写在组件外部。正确写法如下:
import { useQuery } from "@tanstack/react-query";
import Axios from "axios"; // 必须导入Axios

// 替换为你的实际组件名称
function ProductList() {
  const { data: produktet } = useQuery({
    queryKey: ["gjerat"],
    queryFn: () => {
      return Axios.get("http://localhost:3500/dat").then((res) => res.data);
    },
  });

  // 异步请求初始阶段data会是undefined,需做状态判断
  if (!produktet) {
    return <div>加载中...</div>;
  }

  return (
    <div>
      {/* 渲染你的数据 */}
      {produktet.map(item => <div key={item.id}>{item.name}</div>)}
    </div>
  );
}

export default ProductList;
  1. 异步数据的时机问题
    React Query的请求是异步的,组件首次渲染时data会是undefined,直到请求成功后才会更新。直接在组件顶级打印produktet会先输出一次undefined,之后请求完成才会输出有效数据。你可以结合isLoading状态做更友好的加载提示:
const { data: produktet, isLoading } = useQuery({
  queryKey: ["gjerat"],
  queryFn: () => {
    return Axios.get("http://localhost:3500/dat").then((res) => res.data);
  },
});

if (isLoading) {
  return <div>正在获取数据...</div>;
}
  1. 遗漏Axios导入
    子组件代码中使用了Axios但未导入,会导致运行时错误,务必在组件顶部添加导入语句:
import Axios from "axios";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:55:08