使用React手动刷新react-query onClick

2023-11-25

当我重新获取查询时,当我有 onClick 按钮时,它会进入“正在更新...”状态,但我希望重新获取查询并显示“正在加载...”状态。我的代码是:

https://stackblitz.com/edit/react-ts-jfq8ve?file=index.tsx

import React, { useEffect } from 'react';
import { render } from 'react-dom';
import { useQuery } from 'react-query';
import axios from 'axios';
import { QueryClient, QueryClientProvider } from 'react-query';

const App: React.FunctionComponent = () => {
  const [value, setValue] = React.useState<number>(7);

  const queryKey = 'getData';

  const getData = async (): Promise<any> => {
    await new Promise((resolve) => setTimeout(resolve, 1000));
    const response = await axios
      .get(`https://jsonplaceholder.typicode.com/todos`)
      .then((res) => res.data);
    return response;
  };

  const {
    data: result,
    status,
    isRefetching,
    error,
    refetch,
  }: any = useQuery(queryKey, getData, {
    refetchOnWindowFocus: true,
    staleTime: 0,
    cacheTime: 0,
    refetchInterval: 0,
  });

  useEffect(() => {
    refetch();
  }, [value, refetch]);

  return (
    <div className="Container">
      <button onClick={() => setValue(prevValue => prevValue + 1 )}>Set value</button>
      {isRefetching ? <p className="mt-3">Updating data...</p> : null}
      {status === 'error' && <div className="mt-5">{error.message}</div>}
      {status === 'loading' && <div className="mt-5">Loading data ...</div>}
      {status === 'success' && (
        <div>
          {result?.map((inner: any, index: number) => {
            return <li key={index}>{inner.title}</li>;
          })}
        </div>
      )}
    </div>
  );
};

const queryClient = new QueryClient();

render(
  <QueryClientProvider client={queryClient}>
    <App />
  </QueryClientProvider>,
  document.getElementById('root')
);

根据Yozi的回答,我删除了useEffect然后把refetch功能为onClick按钮的。

  const {
    data: result,
    isFetching,
    status,
    error,
    refetch,
  }: any = useQuery(queryKey, getData, {
    refetchOnWindowFocus: true,
    staleTime: 0,
    cacheTime: 0,
    refetchInterval: 0,
  });

  return (
    <div className="Container">
      <button onClick={refetch}>Refetch query</button>
      {status === 'error' && <div className="mt-5">{error.message}</div>}
      {isFetching ? (
        <div className="mt-5">Loading data ...</div>
      ) : (
        <div>
          {status === 'success' && (
            <div>
              {result?.map((inner: any, index: number) => {
                return <li key={index}>{inner.title}</li>;
              })}
            </div>
          )}
        </div>
      )}
    </div>
  );
};

在线示例位于:https://stackblitz.com/edit/react-ts-j87pub?file=index.tsx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用React手动刷新react-query onClick 的相关文章

随机推荐

  • 如何修复 Vue3 客户端版本的“unsafe-eval”错误?

    我在我的应用程序中使用 Express cors 和头盔 Vue3仅在客户端使用 库文件自托管在public文件夹中 我只是做 将模块添加到客户端 问题是当我使用它时 它总是给我一个Uncaught EvalError Refused to
  • Java 中文件存在的锁定

    简洁版本 为什么要File createNewFile 不能用于文件锁定 或者更具体地说 如果使用它来锁定应用程序数据目录是否会出现问题 Details 我想使用锁定文件来保护我的应用程序数据目录 如果该文件lock存在 目录被锁定 应用程
  • SqlBulkCopy 从列表 <>

    如何使用 SqlBulkCopy 从简单对象的 List 中进行大量插入 我是否实现自定义 IDataReader With 快速会员 您可以做到这一点 而无需通过DataTable 在我的测试中 性能提高了一倍多 using var bc
  • 如何在我的应用程序中手动包含 VCL 样式?

    我有一个应用程序 它使用条件能够将其编译为 VCL 表单应用程序或 Delphi XE2 中的 Windows 服务应用程序 但是 由于我手动更改了项目的主源文件 IDE 将不再允许我使用标准项目选项窗口进行某些修改 具体来说 我无法选择要
  • 如何在 string.replace 中输入正则表达式?

    我需要一些关于声明正则表达式的帮助 我的输入如下 this is a paragraph with lt 1 gt in between and then there are cases where the lt 99 gt number
  • XMLHttpRequest upload.onprogress 立即完成

    我正在尝试使用 HTML5 制作一个带有进度表的文件上传器 这是我的代码
  • C++/CLI:相对于 C# 的优势

    与 C 相比 托管 C CLI 有什么主要优势吗 绝对不是我认为的语法 因为 C CLI 中的以下代码非常丑陋 C CLI 代码 Out List
  • 日志方法之间的区别

    我是 android 新手 我使用以下方法打印 log cat Log w Tag String text 并记录文本打印 但经过一段时间的搜索后 我找到了更多打印 logcat 的方法 例如 Log v Log d 现在我对这些方法感到困
  • 跨 JavaEE Web 服务使用单个 MongoClient

    在阅读了 mongo 文档后 该文档说 MongoClient 的每个实例都处理自己的池 我该如何在整个应用程序中只拥有一个实例呢 这看起来可能是使用单例 bean 的场景 但这似乎会违背连接池的目的 如果一次只有一个用户能够访问包含 Mo
  • 传递给 pytest 夹具的参数可以作为变量传递吗?

    我有两个简单的测试设置 我试图将它们分组到一个夹具中 并希望测试函数将 参数 传递给夹具 这是一个人为的例子 来解释我的问题 假设我有以下 pytest 夹具 pytest fixture scope module params param
  • DataTable.Select日期格式问题

    我正在使用 DataTable Select 在日期范围内过滤数据表 我的条件字符串是 CreatedOn gt 03 11 2009 00 00 00 AND CreatedOn lt 03 11 2009 23 59 00 此过滤器不返
  • UnicodeEncodeError:“ascii”编解码器无法对特殊名称的字符进行编码[重复]

    这个问题在这里已经有答案了 我的 python 版本 2 7 脚本运行良好 可以从本地 html 文件获取一些公司名称 但是当涉及到某些特定的国家 地区名称时 它会给出此错误 UnicodeEncodeError ascii 编解码器无法编
  • rgba 在 IE9 中不工作

    由于某种原因 我无法使用 IE9 在 CSS 中使用 rgba 我已经使用 Chrome 进行了测试 效果很好 不知道出了什么问题 我的 HTML 是
  • Eclipse + Maven:强制执行环境“JavaSE-1.6”而不是固定的JDK

    我使用 Eclipse 作为 IDE 并在其外部使用 Maven 以使所有依赖项保持最新并更新 Eclipse 项目 在 Eclipse 中 我通常指定 JRE 系统库作为任何 Java 项目的执行环境 通常是 JavaSE 1 6 在 p
  • CSS 将文本旋转 n 度,但不旋转边界框?

    我知道 CSStransform rotate属性 以及用于制作有角度的方法div元素 但有一个非常重要的设计元素我无法在任何地方找到解决 如何保持边界框的角度 当我创建有角度的 div 元素时 我使用一个旋转的包装元素n度数 然后是子元素
  • C#:如何使用类型转换器本地化枚举

    阅读后我试图了解如何使用类型转换器这个答案我的其他问题之一 但我不确定我是否完全明白 在我的特定情况下 我想通过根据枚举成员是什么来获取资源字符串 将枚举成员 转换 为本地化字符串 例如 如果我有这个枚举 public enum Sever
  • Mongo复杂排序?

    我知道如何按多个字段对 MongoDB 中的查询进行排序 例如 db coll find sort a 1 b 1 我可以使用用户定义的函数进行排序吗 例如 假设 a 和 b 是整数 则通过 a 和 b 之间的差 a b Thanks UP
  • 如何安装特定版本的 Erlang/OTP?

    我继承了一个带有木偶 流浪者 虚拟框设置的项目 vagrant 的规定正在破坏我的 erlangs 周围的rabbitmq server 错误 gt default err Stage main Rabbitmq Install Packa
  • TensorFlow:兼容性弃用警告

    注意 我的第一个问题在这里 请原谅缺乏细节或信息 如果需要的话 我们非常乐意澄清 我在 Mac 上运行 TensorFlow 1 0 0 并且在使用 learn Estimator 类时不断收到此警告 警告 tensorflow 来自 25
  • 使用React手动刷新react-query onClick

    当我重新获取查询时 当我有 onClick 按钮时 它会进入 正在更新 状态 但我希望重新获取查询并显示 正在加载 状态 我的代码是 https stackblitz com edit react ts jfq8ve file index