当前位置:首页 > 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 中实现衰减效果(如滚动衰减、拖动释放后的惯性滑动)通常需要结合物理动画原理或第三方动画库。以下是几种常见方法: 使用 CSS 动画和 @keyf…

react架构如何

react架构如何

React 架构核心概念 React 的架构围绕组件化、虚拟 DOM 和单向数据流设计。组件是构建用户界面的独立模块,分为函数组件和类组件。虚拟 DOM 通过高效的 Diff 算法减少直接操作真实 D…

react如何卸载

react如何卸载

卸载 React 项目或依赖 如果需要完全卸载 React 项目或相关依赖,可以按照以下步骤操作: 删除项目文件夹 直接删除整个项目文件夹是最彻底的方式。确保已备份重要代码或配置文件。 卸载全局安…

react如何encode

react如何encode

React 中编码的实现方式 在 React 中,编码通常涉及对 URL、HTML 实体或特殊字符的处理。以下是几种常见的编码方法: 使用 encodeURIComponent 进行 URL 编码…

如何同步react

如何同步react

同步React组件状态的方法 使用useState和useEffect钩子组合可以同步React组件的状态。useState用于声明状态变量,useEffect用于监听状态变化并执行副作用。 imp…

react如何重启

react如何重启

重启 React 应用的方法 重新加载当前页面 使用 window.location.reload() 强制刷新页面,这会重新加载整个应用并重置所有状态。 window.location…