使用React Query获取数据返回undefined的问题排查求助
React Query 获取数据返回undefined的问题排查与解决
问题核心原因及修复步骤:
- 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); }, });
- 违反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;
- 异步数据的时机问题
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>; }
- 遗漏Axios导入
子组件代码中使用了Axios但未导入,会导致运行时错误,务必在组件顶部添加导入语句:
import Axios from "axios";
内容的提问来源于stack exchange,提问作者florian dollani
相关产品推荐
相关产品推荐

