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

响应拦截器

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

在react中如何封装axios

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)

为封装增加类型定义:

在react中如何封装axios

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 的灵活性。根据实际项目需求,可以进一步扩展拦截器逻辑或添加更多辅助功能。

标签: reactaxios
分享给朋友:

相关文章

react如何开发

react如何开发

React 开发基础步骤 安装 Node.js 和 npm/yarn 确保系统已安装 Node.js(包含 npm)或 Yarn。React 项目依赖这些工具管理包和运行脚本。官方推荐使用 Node.…

react项目如何

react项目如何

创建React项目 使用create-react-app工具快速初始化项目。确保已安装Node.js(建议版本≥12.0.0),运行以下命令生成新项目: npx create-react-app m…

react如何引入

react如何引入

引入React的方法 React可以通过多种方式引入项目,具体取决于项目需求和开发环境。以下是常见的几种方法: 通过CDN引入 在HTML文件中直接通过CDN链接引入React和ReactDOM:…

vscode如何配置react

vscode如何配置react

配置 VSCode 进行 React 开发 安装必要插件 ES7+ React/Redux/React-Native snippets:提供 React 代码片段快速生成功能。 Prettier -…

react如何代码优化

react如何代码优化

减少不必要的重新渲染 使用 React.memo 包装函数组件以避免在 props 未变化时重新渲染。对于类组件,可以通过 shouldComponentUpdate 或继承 PureComponen…

react如何获取光标

react如何获取光标

获取光标位置的方法 在React中获取光标位置通常涉及处理输入框或文本区域的onChange或onSelect事件。以下是几种常见的方法: 通过selectionStart和selectionEnd…