当前位置:首页 > React

react如何封装请求

2026-02-12 07:30:30React

封装请求的常见方法

在React中封装HTTP请求通常涉及创建可复用的函数或钩子,以减少重复代码并统一处理错误、loading状态等。以下是几种典型实现方式:

使用axios实例封装

创建基础的axios实例,配置拦截器和默认参数:

// utils/request.js
import axios from 'axios';

const instance = axios.create({
  baseURL: 'https://api.example.com',
  timeout: 10000,
});

// 请求拦截器
instance.interceptors.request.use(config => {
  config.headers.Authorization = `Bearer ${localStorage.getItem('token')}`;
  return config;
});

// 响应拦截器
instance.interceptors.response.use(
  response => response.data,
  error => {
    console.error('API Error:', error);
    return Promise.reject(error);
  }
);

export default instance;

自定义hook封装

创建useFetch钩子管理请求状态:

// hooks/useFetch.js
import { useState, useEffect } from 'react';
import request from '../utils/request';

function useFetch(url) {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);

  useEffect(() => {
    const fetchData = async () => {
      setLoading(true);
      try {
        const result = await request.get(url);
        setData(result);
      } catch (err) {
        setError(err);
      } finally {
        setLoading(false);
      }
    };

    fetchData();
  }, [url]);

  return { data, loading, error };
}

export default useFetch;

高阶组件封装

通过HOC包装组件提供请求能力:

// hocs/withRequest.js
import React from 'react';
import request from '../utils/request';

function withRequest(WrappedComponent) {
  return function WithRequest(props) {
    const [data, setData] = React.useState(null);

    const fetchData = async (url) => {
      try {
        const result = await request.get(url);
        setData(result);
      } catch (error) {
        console.error(error);
      }
    };

    return <WrappedComponent {...props} data={data} fetchData={fetchData} />;
  };
}

export default withRequest;

请求工厂函数

创建不同类型的请求方法:

// services/api.js
import request from '../utils/request';

export const getUsers = (params) => request.get('/users', { params });
export const createUser = (data) => request.post('/users', data);
export const updateUser = (id, data) => request.put(`/users/${id}`, data);

关键优化点

  • 错误处理:统一在拦截器中处理HTTP错误码和业务错误码
  • 取消请求:使用AbortController避免组件卸载后的内存泄漏
  • TypeScript支持:为请求函数添加类型定义
  • 缓存策略:根据需要实现SWR或缓存去重
  • Mock适配:开发环境注入Mock服务拦截请求

使用示例

组件内调用自定义hook:

react如何封装请求

function UserList() {
  const { data, loading, error } = useFetch('/users');

  if (loading) return <div>Loading...</div>;
  if (error) return <div>Error!</div>;

  return (
    <ul>
      {data?.map(user => <li key={user.id}>{user.name}</li>)}
    </ul>
  );
}

标签: react
分享给朋友:

相关文章

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gree…

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yarn…

如何安装react

如何安装react

安装React的方法 方法一:使用Create React App(官方推荐) Create React App是官方提供的脚手架工具,适合快速搭建React项目。确保已安装Node.js(建议版本≥…

react 如何遍历

react 如何遍历

遍历数组 在React中遍历数组通常使用map方法,它会返回一个新的数组。map是处理数组并渲染列表元素的首选方法。 const items = ['Apple', 'Banana', 'Cherr…

react如何创建项目

react如何创建项目

使用 Create React App 创建项目 Create React App (CRA) 是官方推荐的 React 项目脚手架工具,适合快速初始化一个现代化的 React 项目。 安装 C…

如何实操react

如何实操react

安装 React 环境 使用 create-react-app 快速搭建项目: npx create-react-app my-app cd my-app npm start 项目启动后默认在…