React ahooks——useRequest

目录

简介

1. 核心功能

2. 基本用法

3. 高级用法

(1)轮询请求(Polling)

(2)防抖(Debounce)

(3)依赖刷新(refreshDeps)

(4)数据缓存(cacheKey)

(5)分页请求

4. 返回值详解

5. 适用场景

6. 总结


简介

useRequest 是 ahooks 提供的一个 强大的异步数据请求管理 Hook,它封装了请求的 加载状态(loading)、数据(data)、错误处理(error)、缓存、轮询、防抖/节流 等常见功能,极大简化了 React 中的异步逻辑处理。

1. 核心功能

功能说明
自动/手动请求默认自动发送请求,也可手动触发(manual: true
状态管理自动管理 loadingdataerror 状态
生命周期钩子onSuccessonErroronFinally 回调
轮询请求pollingInterval 定时刷新数据
防抖/节流debounceWaitthrottleWait 控制请求频率
依赖刷新refreshDeps 依赖变化时自动重新请求
数据缓存cacheKey 缓存数据,避免重复请求
屏幕聚焦刷新refreshOnWindowFocus 窗口重新聚焦时刷新数据
分页支持pagination 轻松管理分页数据
请求取消cancel 方法可取消进行中的请求

2. 基本用法

import React from "react";
import { useRequest } from "ahooks";
export default function App() {const fetchData = async (params) => {await new Promise((r) => setTimeout(r, 1000)); // 正常的请求return params; // 这里决定 返回的 data 的值};const { data, loading, error, run } = useRequest(fetchData, {manual: true, // true:触发手动请求,默认自动请求onSuccess: (result) => {// 请求成功时的处理逻辑,对应于fetchData的返回值console.log("请求成功获取的数据", result);},onError: (err) => {// 请求发生错误时的处理逻辑console.log("请求失败获取的数据", err);},});const clickButton = () => {// 在需要的时候手动触发请求,并传递参数run({ name: 123 });};console.log(data);return (<div><div>{loading ? "加载中" : "加载完成"}</div><button onClick={clickButton}>点击请求</button><div>名字:{data?.name}</div></div>);
}

3. 高级用法

(1)轮询请求(Polling)

const { data } = useRequest(getRealTimeData, {pollingInterval: 3000, // 每 3 秒请求一次
});

(2)防抖(Debounce)

const { run } = useRequest(searchKeyword, {debounceWait: 500, // 500ms 防抖manual: true,
});<input onChange={(e) => run(e.target.value)} />

(3)依赖刷新(refreshDeps

const [userId, setUserId] = useState(1);
const { data } = useRequest(() => getUser(userId), {refreshDeps: [userId], // userId 变化时自动重新请求
});

(4)数据缓存(cacheKey

const { data } = useRequest(getData, {cacheKey: 'user-data', // 缓存 key
});// ------------获取缓存数据--------
import { getCache } from 'ahooks';const cachedData = getCache('user-data');
console.log(cachedData); // { data: ..., timestamp: ... }// ------------设置缓存数据--------
import { setCache } from 'ahooks';// 手动更新缓存
setCache('user-data', { data: { name: '手动更新' }, timestamp: Date.now() });// ------------清除缓存数据--------
import { clearCache } from 'ahooks';clearCache('user-data'); // 删除指定缓存
clearCache(); // 清空所有缓存

(5)分页请求

const { data, pagination } = useRequest(({ current, pageSize }) => fetchData({ current, pageSize }),{paginated: true, // 启用分页模式defaultPageSize: 10,}
);<TabledataSource={data?.list}pagination={pagination}
/>

4. 返回值详解

useRequest 返回一个对象,包含以下属性:

属性类型说明
dataany请求返回的数据
loadingboolean是否正在加载
errorError请求错误信息
runfunction手动触发请求(自动处理 loading
runAsyncfunction手动触发请求(返回 Promise
refreshfunction重新发起上一次请求
mutatefunction直接修改 data(如乐观更新)
cancelfunction取消当前请求

5. 适用场景

  • 数据获取(GET 请求)

  • 表单提交(POST/PUT/DELETE)

  • 搜索建议(防抖优化)

  • 实时数据(轮询)

  • 分页/无限加载

  • 缓存优化(减少重复请求)


6. 总结

useRequest 是 ahooks 最强大的 Hook 之一,它:
✅ 减少样板代码(不用手动写 loadingerror 状态)
✅ 内置优化策略(防抖、节流、缓存、轮询)
✅ 灵活可控(支持手动触发、依赖刷新、乐观更新)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85713.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

re正则、Xpath、BeautifulSouplxml 区别

目录 1. re 正则表达式2. XPath3. BeautifulSoup + lxml4. 功能特性对比5.对比与建议在网页数据解析中,正则表达式(re)XPath(常结合lxml)BeautifulSoup(常依赖解析器如lxml)是三种主流技术,各有核心差异和适用场景。 1. re 正则表达式 优势:文本匹配效率高,尤其适用于…

教师办工专用 资源包|课件+手抄报+PPT模板+常用表格 PDF格式93GB

如果家里亲戚或朋友有走上教育之路的人&#xff0c;给他这份整合可以减轻不少工作负担&#xff0c;更快地适应教育的节奏。也可以发给孩子的老师让他在平时做个班级活动的参考 《老师教学办工资源包》包括手抄报大全、教学计划、工作总结、培训手册、课程表等教学、办公常用资…

算法第37天| 完全背包\518. 零钱兑换 II\377. 组合总和 Ⅳ\57. 爬楼梯

完全背包 完全背包和01背包的区别 纯完全背包&#xff0c;遍历背包和物品的顺序是可以对调的&#xff0c;只要求得出最大价值&#xff0c;不要求凑成总和的元素的顺序&#xff1b; 01背包&#xff0c;遍历背包和物品的顺序是不可以对调的&#xff08;一维不行&#xff0c;二维…

七彩喜智慧康养平台:重构银发生活的数字守护网

随着社会老龄化程度的不断加深&#xff0c;如何让老年人安享幸福晚年成为社会关注的焦点。 在这一背景下&#xff0c;七彩喜智慧康养平台应运而生&#xff0c;以创新的科技手段和贴心的服务理念&#xff0c;为老年人的生活带来了诸多好处&#xff0c;发挥着重要作用&#xff0…

【设计模式】用观察者模式对比事件订阅(相机举例)

&#x1f4f7; 用观察者模式对比事件订阅(相机举例) 标签&#xff1a;WPF、C#、Halcon、设计模式、观察者模式、事件机制 在日常开发中&#xff0c;我们经常使用 事件机制&#xff08;Event&#xff09; 来订阅图像采集信号。然而当系统日益复杂&#xff0c;多个模块同时需要响…

【数据分析九:Association Rule】关联分析

一、数据挖掘定义 数据挖掘&#xff1a; 从大量的数据中挖掘那些令人感兴趣的、有用的、隐含的、先前未知的 和可能有用的 模式或知识 &#xff0c;并据此更好的服务人们的生活。 二、四类任务 数据分析有哪些任务&#xff1f; 今天我们来讲述其中的关联分析 三、关联分析 典…

AWS Security Hub邮件告警设置

问题 需要给AWS Security Hub设置邮件告警。 前提 已经启用AWS Security Hub。 AWS SNS 创建一个AWS Security Hub告警主题SecurityHub-Topic&#xff0c;如下图&#xff1a; 创建完成后&#xff0c;订阅该主题。 AWS EventBridge 设置规则名SecurityHubFindings-Rules…

(OSGB转3DTiles强大工具)ModelSer--强大的实景三维数据分布式管理平台

1. ModelSer 能帮我们做什么 1.1 最快速的 osgb 发布 3dtiles 服务 测试的速度大于 10G/分钟&#xff0c;且速度基本是线性的&#xff08;100G10分钟&#xff0c;1T100分钟&#xff09;。支持城市级倾斜数据半天内完成服务发布&#xff0c;并支持数据的单块更新。 1.2 支持所见…

《HTTP权威指南》 第5-6章 Web服务器和代理

基本Web服务器请求的步骤 1、建立连接 接受一个客户端连接&#xff0c;或者如果不希望与这个客户端建立连接&#xff0c;就将其关闭。 处理新连接客户端主机名识别&#xff1a;反向DNS查找&#xff0c;将IP地址转换为客户端主机名过ident确定客户端用户&#xff1a;客户端支持…

微信二次开发,对接智能客服逻辑

接口友情链接&#xff0c;点击即可访问。 ## 设备创建与复用机制 首次调用/login/getLoginQrCode需传空appId触发设备创建&#xff0c;响应返回固定设备ID。后续登录必须复用此ID以避免风控&#xff08;同一微信号绑定固定设备&#xff09;。设备类型可选ipad/mac&#xff0c;当…

网站并发访问量达到1万以上需要注意哪些事项

当网站并发访问量达到1万以上时&#xff0c;需要注意以下几个方面‌&#xff1a; ‌服务器硬件配置‌&#xff1a; ‌处理器&#xff08;CPU&#xff09;‌&#xff1a;选择多核、高频率的CPU&#xff0c;以确保服务器能够高效地处理大量的请求。‌内存&#xff08;RAM&#xf…

二、OpenCV的第一个程序

文章目录 一、第一个程序&#xff1a;显示图片1.1 cv::imread1.2 cv::namedWindow1.3 cv::imshow 二、第二个程序&#xff1a;视频2.1 cv::VideoCapture 三、加入了滑动条的基本浏览窗口 一、第一个程序&#xff1a;显示图片 示例&#xff1a;一个简单的加载并显示图像的OpenC…

第14次:商品列表、热销商品及详情

第1步&#xff1a;定义获取商品列表的视图类ListView&#xff0c;本视图中完成了如下功能&#xff1a; 根据商品类别id获取商品类别信息&#xff0c;并根据类别信息反向查询到所有的该类别的商品。根据页号和排序方式两个参数&#xff0c;获取某个页面的商品列表信息。 #good…

基于双层注意力重加权 LSTM 的中文长文本谣言检测模型

文章目录 1.摘要2.介绍3.相关工作3.1 假新闻检测数据集3.2 假新闻检测方法3.3 长文本假新闻检测的挑战与进展3.4 与现有方法的区别 4.方法4.1 模型结构4.2模型代码4.3 损失函数与优化方法 5. 实验5.1 数据集与预处理5.2 实验设置5.3 实验结果5.4 对比分析5.5 结果分析与讨论 6.…

在 MyBatis 的xml中,什么时候大于号和小于号可以不用转义

在 MyBatis 中&#xff0c;< 和 > ​在动态 SQL 标签内部​ 无需转义的功能是在以下版本引入的&#xff1a; &#x1f4cc; 关键版本说明 版本支持情况注意事项​MyBatis 3.3.0​​✅ 在 <if>、<where>、<set> 等动态 SQL 标签内部可直接使用 < 和…

Redis 的穿透、雪崩、击穿

Redis 的穿透、雪崩、击穿 1、缓存穿透 定义 缓存穿透是指查询一个不存在的数据&#xff0c;由于缓存中没有该数据&#xff0c;每次请求都会直接访问数据库&#xff0c;导致数据库压力过大 产生原因 恶意攻击&#xff1a;攻击者故意请求大量不存在的key&#xff0c;导致请求直…

有道翻译官手机版:智能翻译,随行助手

在当今全球化的时代&#xff0c;语言不再是交流的障碍。无论是学习外语、出国旅游、商务出差还是日常交流&#xff0c;一款高效、准确的翻译软件都能成为我们的好帮手。有道翻译官手机版正是这样一款功能强大、操作便捷的语言翻译软件&#xff0c;它凭借先进的翻译技术和丰富的…

nuxt3 + vue3 分片上传组件全解析(大文件分片上传)

本文将详细介绍一个基于 Vue.js 的分片上传组件的设计与实现,该组件支持大文件分片上传进度显示等功能。 组件概述 这个上传组件主要包含以下功能: 支持大文件分片上传(默认5MB一个分片)支持文件哈希计算,用于文件唯一标识显示上传进度(整体和单个文件)支持自定义UI样…

正则表达式与C++

转自个人博客 1. 概述 1.1 正则表达式概述 正则表达式&#xff08;Regular Expressions&#xff0c;简称 regex&#xff09;是用于匹配文本模式的一种特殊字符序列&#xff0c;其可以用一系列字符来表示出不同文本的对应模式。正则表达式的应用范围十分广泛&#xff0c;包括验…

OpenCV CUDA模块设备层-----在 GPU上计算反双曲正切函数atanh()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 对输入的 uchar1 像素值&#xff08;范围 [0, 255]&#xff09;&#xff0c;先归一化到 [0.0, 1.0] 浮点区间&#xff0c;然后计算其 反双曲正切…