当前位置:首页 > 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);
  }
};

高级配置选项

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

在react中如何封装axios

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

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

// 取消请求
cancel();

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

标签: reactaxios
分享给朋友:

相关文章

react如何运行

react如何运行

运行React项目的步骤 安装Node.js 确保系统已安装Node.js(建议版本12以上),可从官网下载并安装。Node.js自带npm包管理器,用于后续依赖安装。 创建React项目 使用官方…

如何关闭react

如何关闭react

关闭React应用的步骤 在开发或运行React应用时,可能需要关闭正在运行的开发服务器或停止应用。以下是几种常见情况的处理方法: 停止开发服务器 如果正在使用npm start或yarn star…

react如何通信

react如何通信

React 组件通信方式 React 组件间的通信方式多样,具体选择取决于组件关系和场景需求。以下是常见方法: 父子组件通信 父组件通过 props 向子组件传递数据,子组件通过回调函数通知父组件…

react如何启动

react如何启动

启动 React 项目的步骤 确保已安装 Node.js React 需要 Node.js 环境运行,建议安装最新稳定版(LTS)。可通过以下命令检查是否已安装: node -v npm -v…

如何读react源码

如何读react源码

理解React源码的结构 React源码托管在GitHub上,主要分为几个核心模块:react、react-dom、react-reconciler等。react包包含核心API和组件逻辑,react…

react如何减少伤害

react如何减少伤害

减少 React 应用性能伤害的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行浅比较,避免不必要的重新渲染。类组件可以使用 PureC…