当前位置:首页 > React

在react中如何封装axios

2026-01-25 13:32:02React

封装 Axios 的基本结构

创建一个独立的 axios 实例,配置基础 URL 和默认请求头。通常在 src/utilssrc/api 目录下新建 http.js 文件:

import axios from 'axios';

const http = axios.create({
  baseURL: 'https://api.example.com', // 替换为实际 API 地址
  timeout: 10000,
  headers: { 'Content-Type': 'application/json' }
});

请求拦截器

添加请求拦截器用于统一处理请求前的逻辑,例如添加认证 token:

http.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token');
    if (token) config.headers.Authorization = `Bearer ${token}`;
    return config;
  },
  error => Promise.reject(error)
);

响应拦截器

添加响应拦截器处理通用响应逻辑,例如错误状态码处理:

http.interceptors.response.use(
  response => response.data,
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          console.error('未授权');
          break;
        case 404:
          console.error('API 不存在');
          break;
        default:
          console.error('其他错误');
      }
    }
    return Promise.reject(error);
  }
);

封装通用请求方法

将常用的 HTTP 方法封装为统一接口:

export const get = (url, params) => http.get(url, { params });
export const post = (url, data) => http.post(url, data);
export const put = (url, data) => http.put(url, data);
export const del = url => http.delete(url);

类型支持(TypeScript)

为封装增加类型定义:

interface ResponseData<T> {
  code: number;
  data: T;
  message: string;
}

export const get = <T>(url: string, params?: any): Promise<ResponseData<T>> => 
  http.get(url, { params });

export const post = <T>(url: string, data?: any): Promise<ResponseData<T>> => 
  http.post(url, data);

使用示例

在组件中调用封装好的方法:

import { get, post } from '@/utils/http';

// 获取数据
const fetchData = async () => {
  try {
    const res = await get('/endpoint', { id: 1 });
    console.log(res.data);
  } catch (err) {
    console.error(err);
  }
};

// 提交数据
const submitData = async () => {
  try {
    const res = await post('/endpoint', { name: 'test' });
    console.log(res);
  } catch (err) {
    console.error(err);
  }
};

高级配置选项

可根据项目需求扩展更多配置:

// 取消请求功能
const CancelToken = axios.CancelToken;
let cancel;

http.get('/user', {
  cancelToken: new CancelToken(c => {
    cancel = c;
  })
});

// 取消请求
cancel();

这种封装方式提供了统一的错误处理、请求管理和类型支持,同时保持了 axios 的灵活性。根据实际项目需求,可以进一步扩展拦截器逻辑或添加更多辅助功能。

在react中如何封装axios

标签: reactaxios
分享给朋友:

相关文章

react如何销毁

react如何销毁

销毁 React 组件 在 React 中,销毁组件通常涉及清理副作用(如事件监听器、定时器或订阅)以防止内存泄漏。以下是实现组件销毁的常见方法: 使用 useEffect 清理副作用 在函数…

react如何鉴定

react如何鉴定

React 鉴权方法 基于路由的鉴权 在 React 中,可以通过封装路由组件实现鉴权。使用 react-router-dom 检查用户是否登录,未登录则跳转至登录页。 import { Rou…

如何降低react版本

如何降低react版本

降低 React 项目版本的步骤 检查当前 React 版本 运行以下命令查看项目中安装的 React 当前版本: npm list react 或 yarn list react 修改…

如何react页面

如何react页面

创建 React 页面 使用 create-react-app 快速初始化项目: npx create-react-app my-app cd my-app npm start 基础页面结构 在…

react性能如何

react性能如何

React 性能特点 React 通过虚拟 DOM(Virtual DOM)和高效的 diff 算法优化性能。虚拟 DOM 减少了直接操作真实 DOM 的开销,仅在必要时更新变化的部分。React 的…

如何改造react

如何改造react

改造 React 项目的关键方法 分析当前项目结构 通过评估现有组件、状态管理和依赖项,明确需要改进的部分。使用工具如 webpack-bundle-analyzer 识别性能瓶颈。 升级 Rea…