React Query useQuery钩子无数据返回,但API请求正常问题求助
React Query useQuery 无法获取返回数据的解决办法
你代码里的核心问题是useQuery的回调函数没有返回异步请求的Promise。虽然listofgroupsapi本身能正常发起请求并打印数据,但你在useQuery里调用它时,没有把这个异步函数的返回值(Promise)传递给useQuery,导致React Query无法追踪请求的完成状态,自然不会更新data和isLoading状态。
修复步骤
让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));优化查询键(可选但重要)
把所有影响请求结果的参数(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
相关产品推荐
相关产品推荐

