当前位置: 首页 > article >正文

tanstack/react-query使用手册

1. useQuery

useQuery的使用

一、data是后端成功返回的数据, 第一次的值为undefined
二、isLoading是指数据是否正在加载的状态,通常用于判断请求是否还在进行中。当isLoading为true时,表示数据正在加载中,当isLoading为false时,表示数据加载完成。
三、isFetching是指数据是否正在进行更新的状态,通常用于判断数据是否正在进行更新操作,比如重新加载数据或者刷新数据。当isFetching为true时,表示数据正在进行更新操作,当isFetching为false时,表示数据更新操作完成。
isLoading和isFetching的区别在于,isLoading表示数据是否正在加载中,而isFetching表示数据是否正在进行更新操作。可以说isLoading是isFetching的子集,即当isFetching为true时,isLoading一定为true,但当isLoading为true时,isFetching不一定为true。

const {data, isFetching, isLoading} = useQuery({
    // queryKey的robotList可以认为是这个useQuery的身份识别,必须是唯一的,后面携带的参数是用来控制是否触发查询,如果条件不变则取缓存内的数据而不调用接口
    queryKey: ['robotList', curPage, pageSize],
    queryFn: () => ServiceWorkerRegistration.fetchRobotList({curPage: 1, pageSize: 20})
});

2. useMutation

// mutate是用来触发这个方法,isPending是布尔值,true为正在调用中,false表示接口调用完成
const {mutate, isPending} = useMutation({
    mutationFn: () => services.fetchAddRobot({name: '机器人'}),
    onSuccess: resp => {
        // resp为后端返回值

    },
    onError: err => {
        console.err(err);
    }
})


3. useQueryClient(结合useQuery和useMutation一起使用)

import {useQuery, useMutation, useQueryClient} from '@tanstack/react-query';

function App(props) {
    const client = useQueryClient();

    const {data, isFetching, isLoading} = useQuery({
        // queryKey的robotList可以认为是这个useQuery的身份识别,必须是唯一的,后面携带的参数是用来控制是否触发查询,如果条件不变则取缓存内的数据而不调用接口
        queryKey: ['robotList', curPage, pageSize],
        queryFn: () => ServiceWorkerRegistration.fetchRobotList({curPage: 1, pageSize: 20})
    });
    
    const {mutate, isPending} = useMutation({
        mutationFn: () => services.fetchAddRobot({name: '机器人'}),
        onSuccess: resp => {
            // resp为后端返回值
            if (resp.code === 8) {
                // 创建成功后重新查询
                client.invalidateQueries({
                    <!-- 上方提到的useQuery的身份识别用途之一就是这里,根据queryKey判断是否触发全部的useQuery,如果存在值就只触发对应的useQuery -->
                    queryKey: ['hello']
                })
            }
        },
        onError: err => {
            console.err(err);
        }
    })

    return (
        <div>展示用法</div>
    )    
}


http://www.kler.cn/news/162758.html

相关文章:

  • Redis数据已经删除了,为什么内存占用还是很高?
  • MySQL:找回root密码
  • 多线程并发Ping脚本
  • SpringBoot Seata 死锁问题排查
  • docker常见知识
  • 【SSM源码】基于JAVA的高校竞赛和考级查询系统
  • Linux设备树
  • Elastcsearch:通过 Serverless 提供更多服务
  • KALI LINUX信息收集
  • 机器人刚性碰撞任务的阻抗控制性能
  • MySQL生成UUID并去除-
  • RSA共模攻击【推导+解题脚本】
  • androidstudio设置内存
  • Prism框架快速注册带有特性标签的类型
  • 第一课【习题】HarmonyOS应用/元服务上架
  • ArkTS语言难吗?鸿蒙指南
  • 深度解析Python中的订阅与发布模式
  • java中什么是守护线程?
  • Ubuntu编译文件安装SNMP服务
  • 网安领域含金量最高的证书有哪些?看这1篇就足够了!
  • 14、pytest像用参数一样使用fixture
  • MX6ULL学习笔记 (八) platform 设备驱动实验
  • Qt对excel操作
  • Mysql之数据处理增删改
  • 导入JDBC元数据到Apache Atlas
  • 初识Linux:权限(2)
  • Java八股文面试全套真题【含答案】-Web前端篇
  • Ubuntu22.04安装和卸载软件的命令行
  • 前端面试灵魂提问-计网(2)
  • Windows循环检测,直到网络通/断后执行指定命令