useRequest

用法

默认用法

第一参数是异步函数(接口),在组件初次加载时,会自动触发该函数执行。

js 复制代码
const { data, error, loading } = useRequest(getUsername);

第二个参数,是一个配置选项(一个对象)

详解

useRequestahook 库中提供的一个强大工具,用于简化异步请求的管理。它使得在 React 组件中发起、管理、跟踪异步请求变得更加容易和直观。useRequest 封装了异步请求的状态管理和副作用处理,提供了更高效、更简洁的方式来处理数据获取逻辑。

useRequest 的主要功能

  1. 自动管理请求状态 : useRequest 自动处理请求的加载状态、错误状态和数据状态,使你可以轻松访问这些状态,而不需要手动编写大量的状态管理代码。

  2. 请求取消: 支持请求取消功能,避免在组件卸载时仍然处理请求的结果。

  3. 请求重试: 提供了请求重试的功能,能够在请求失败时自动重试请求。

  4. 缓存支持: 可以配置缓存策略,以减少不必要的网络请求。

  5. 分页与缓存: 支持分页请求和缓存机制,使得数据请求更加灵活和高效。

使用示例

以下是一个简单的示例,演示如何使用 useRequest 来发起一个异步请求并管理其状态:

javascript 复制代码
import React from 'react';
import { useRequest } from 'ahook';

// 模拟一个异步请求函数
const fetchData = async () => {
  const response = await fetch('https://api.example.com/data');
  if (!response.ok) {
    throw new Error('Network response was not ok');
  }
  return response.json();
};

function MyComponent() {
  // 使用 useRequest 来管理请求
  const { data, error, loading, run } = useRequest(fetchData, {
    manual: true, // 手动触发请求
  });

  // 触发请求的函数
  const handleFetchData = () => {
    run();
  };

  if (loading) return <div>Loading...</div>;
  if (error) return <div>Error: {error.message}</div>;

  return (
    <div>
      <button onClick={handleFetchData}>Fetch Data</button>
      {data && <pre>{JSON.stringify(data, null, 2)}</pre>}
    </div>
  );
}

export default MyComponent;

配置选项

useRequest 提供了一些配置选项来定制请求行为:

  • manual: 是否手动触发请求,默认为 false,即组件挂载时自动发起请求。设置为 true 时,需要手动调用 run 函数来发起请求。
  • onSuccess: 请求成功后的回调函数。
  • onError: 请求失败后的回调函数。
  • cacheKey: 请求缓存的 key,用于缓存管理。
  • retryCount: 请求失败时自动重试的次数。

总结

useRequest 提供了一种简化异步请求的方式,帮助开发者更高效地处理请求状态、错误处理和数据缓存等问题。通过使用 useRequest,你可以更专注于业务逻辑,减少手动编写异步请求和状态管理的代码。

相关推荐
xier1234569 分钟前
高性能和高灵活度的react表格组件
前端
你打不到我呢11 分钟前
nestjs入门:上手数据库与prisma
前端
多啦C梦a12 分钟前
React 实战:从 setInterval 到 useInterval,一次搞懂定时器 Hook(还能暂停!)
前端·javascript·react.js
闲不住的李先森18 分钟前
乐观更新
前端·react.js·设计模式
笔尖的记忆24 分钟前
【前端架构和框架】react组件化&数据流
前端·面试
zhangzelin88833 分钟前
TypeScript入门指南:JavaScript的类型化超集
前端·javascript·其他·typescript
lichenyang45341 分钟前
流式聊天界面实现解析:从零到一构建实时对话体验
前端
天蓝色的鱼鱼41 分钟前
Turbopack vs Webpack vs Vite:前端构建工具三分天下,谁将胜出?
前端·webpack
用户841794814561 小时前
vxe-table 实现列头授权自定义插槽模板,自定义输入框
前端
im_AMBER1 小时前
Web 开发 24
前端·笔记·git·学习