首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >react query:如何在useQuery回调中从onSuccess获取数据?

react query:如何在useQuery回调中从onSuccess获取数据?
EN

Stack Overflow用户
提问于 2021-06-27 23:37:43
回答 2查看 23.7K关注 0票数 11

我正在学习react-query,我遇到了一些问题。我想使用通过useQuery获取数据所获得的useQuery,但我将data作为undefined。这是我的代码:

代码语言:javascript
运行
复制
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回调中的onSuccess。那么,我们如何在回调中访问data呢?我试过:

代码语言:javascript
运行
复制
const query = useQuery("fetchData", fetchData, {
    onSuccess: () => {
      console.log("Get data!");
      console.log(query.data); // undefined
    }
  });

但还是没有运气。

我读了文档,发现了以下内容:

onSuccess:(数据: TData) =>无效

所以我在我的代码中尝试了这个:

代码语言:javascript
运行
复制
const {data} = useQuery("fetchData", fetchData, {
    onSuccess: (data: TData) => {
      console.log("Get data!");
      console.log(data); // success
    }
  });

这次起作用了。但我不明白为什么..。代码编辑器也警告我:

代码语言:javascript
运行
复制
Type annotations can only be used in TypeScript files.ts(8010)

有人能告诉我正确的方法吗?非常感谢!

这是一个演示

EN

Stack Overflow用户

回答已采纳

发布于 2021-06-28 00:09:13

只有在从查询中检索到onSuccess时才调用data回调函数。请仔细注意,这个data不是您正在从useQuery返回对象中销毁的那个,而是在成功从useQuery中检索数据时传递给回调的那个。因为它是一个回调函数,所以不需要检查等待/加载情况,因为如果请求成功,最终会调用它。

在您的示例中,第一个data变量将在Home组件挂载后立即返回undefined,因为useQuery调用是异步调用,这意味着从useQuery调用返回的数据将需要从解析因此,一旦Home组件挂载,它就不会直接可用,而只能在查询成功解析后才可用。此外,react-query useQuery钩子使用实际的data对象(由useQuery钩子返回的对象)设置并从钩子返回之前接收的数据调用onSuccess(data)回调。

由于useQuery是一个异步调用(内部),它还提供了request in-flight标志,如isLoadingisFetching等,您可以使用这些标志来检查数据、错误或任何其他合适的用途。

票数 11
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68156096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档