【发布时间】:2021-06-27 23:37:43
【问题描述】:
我正在学习react-query,但遇到了一些问题。我想使用通过useQuery 获取数据的data,但我得到data 作为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 在这里。所以我认为我没有正确访问onSuccess 回调中的data。那么我们如何才能访问回调中的data呢?我试过了:
const query = useQuery("fetchData", fetchData, {
onSuccess: () => {
console.log("Get data!");
console.log(query.data); // undefined
}
});
但还是没有运气。
我阅读了documentation 并发现了这个:
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)
谁能告诉我正确的方法?非常感谢!
这是demo。
【问题讨论】:
-
关于您的错误:
:TData是 Typescript 语法。如果您使用 JavaScript,请忽略它 -
@TkDodo 是的,我只使用 JavaScript。但奇怪的是它有效。
-
如果您通过发布请求获取数据,这可能意味着您想使用
useMutation而不是useQuery。useMutation将数据作为配置回调onSuccess的参数,而useQuery仅在您发出 get 请求时才有数据。
标签: reactjs react-query