欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > React ahooks——useRequest

React ahooks——useRequest

2025/6/21 22:04:39 来源:https://blog.csdn.net/anxinbuxinan/article/details/148793009  浏览:    关键词: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 状态)
✅ 内置优化策略(防抖、节流、缓存、轮询)
✅ 灵活可控(支持手动触发、依赖刷新、乐观更新)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词