reactjs - react-query:如何在 onSuccess 回调中从 useQuery 获取数据?
问题描述
我正在学习react-query
,我遇到了一些问题。我想使用data
我从 fetching data by中得到的useQuery
,但我得到data
as undefined
。这是我的代码:
import React from "react";
import { useQuery } from "react-query";
import { fetchData } from "./providesData";
const Home = () => {
const {data} = useQuery("fetchData", fetchData, {
onSuccess: () => {
console.log("Get data!");
console.log(data); // undefined
}
});
return <div></div>;
};
export default Home;
但是我看到react-query devtools
获取成功并且data
就在这里。所以我认为我没有正确访问data
我的onSuccess
回调。那么我们如何才能访问data
回调中的 呢?我试过了:
const query = useQuery("fetchData", fetchData, {
onSuccess: () => {
console.log("Get data!");
console.log(query.data); // undefined
}
});
但仍然没有运气。
我阅读了文档并发现了这一点:
onSuccess: (data: TData) => void
所以我在我的代码中尝试了这个:
const {data} = useQuery("fetchData", fetchData, {
onSuccess: (data: TData) => {
console.log("Get data!");
console.log(data); // success
}
});
这次它起作用了。但我不明白为什么......而且代码编辑器也警告我:
Type annotations can only be used in TypeScript files.ts(8010)
谁能告诉我正确的方法吗?太感谢了!
这是一个演示。
解决方案
仅当从查询中检索到onSuccess
时才调用回调函数。data
请注意,这data
不是您从useQuery
返回对象中销毁的对象,而是在成功从 API 检索数据时传递给回调的对象。由于它是一个回调函数,因此您不需要检查等待/加载情况,因为如果您的请求成功,它最终会被调用。
在您的情况下,第一个data
变量将在组件安装后undefined
立即返回,因为调用是异步调用,这意味着从调用返回的数据需要从. 因此,它不会在组件安装后直接可用,而只有在查询成功解决后才可用。此外,react-query钩子调用回调,并使用在实际对象(钩子返回的对象)设置并从钩子返回之前接收到的数据。Home
useQuery
useQuery
Promise
Home
useQuery
onSuccess(data)
data
useQuery
由于useQuery
是异步调用(内部),它还提供了诸如、等request in-flight
标志,您可以使用这些标志对数据、错误或任何其他合适的目的进行空检查。isLoading
isFetching
推荐阅读
- react-native - 如何使用 Expo CLI React-Native 构建 64 位
- python-3.x - 以字节对象的形式将 Int 转换为十六进制
- intellij-idea - JRebel 不会使用 Glassfish 3.1.2.1 重新加载更改
- c - c中的线轨迹
- mysql - 选择中的 SELECT 结果不可访问?
- c++ - 基运算符具有非指针类型
- angular - 错误:模块“AppModule”声明的意外值“SocialmediaFeedComponent”。请添加@Pipe/@Directive/@Component 注解
- javascript - 获取浏览器的语言(javascript)
- amazon-web-services - 服务发现 ecs aws
- android - Android TextureView.SurfaceTextureListener 在相机 API 2 中不起作用