当前位置: 首页 > news >正文

React封装axios请求方法

1.安装Axios

首先安装axios

npm install axios

2.创建request.js

在util目录下创建request.js文件,用于封装axios请求

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

// 创建 Axios 实例
const instance = axios.create({
  baseURL: process.env.REACT_APP_API_BASE_URL, // 从环境变量中读取
  timeout: 10000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json',
  },
});

// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么,例如添加 token
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 响应拦截器
instance.interceptors.response.use(
  (response) => {
    // 对响应数据做些什么
    return response.data;
  },
  (error) => {
    // 对响应错误做些什么
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // 处理未授权的情况
          break;
        case 404:
          // 处理未找到资源的情况
          break;
        default:
          // 处理其他错误
          break;
      }
    }
    return Promise.reject(error);
  }
);

// 封装 GET 请求
export const get = (url, params) => {
  return instance.get(url, { params });
};

// 封装 POST 请求
export const post = (url, data) => {
  return instance.post(url, data);
};

// 封装 PUT 请求
export const put = (url, data) => {
  return instance.put(url, data);
};

// 封装 DELETE 请求
export const del = (url) => {
  return instance.delete(url);
};

3.在组件中使用封装的请求

可以在 React 组件中使用封装好的请求方法。

// src/components/ExampleComponent.js
import React, { useEffect, useState } from 'react';
import { get, post } from '../api';

const ExampleComponent = () => {
  const [data, setData] = useState(null);

  useEffect(() => {
    // 使用封装的 GET 请求
    get('/posts')
      .then((response) => {
        setData(response);
      })
      .catch((error) => {
        console.error('Error fetching data:', error);
      });

    // 使用封装的 POST 请求
    post('/posts', {
      title: 'foo',
      body: 'bar',
      userId: 1,
    })
      .then((response) => {
        console.log('Post created:', response);
      })
      .catch((error) => {
        console.error('Error creating post:', error);
      });
  }, []);

  return (
    <div>
      <h1>Example Component</h1>
      {data && (
        <ul>
          {data.map((item) => (
            <li key={item.id}>{item.title}</li>
          ))}
        </ul>
      )}
    </div>
  );
};

export default ExampleComponent;

4.axios和umi-request封装请求的区别

umi-request:umi-request 是 Umi 框架内置的请求库,基于 fetch 封装,专为 Umi 生态设计。适用于使用 Umi 框架的项目。umi-request 的拦截器设计更简洁,直接通过 interceptors 方法实现。
axios:axios 是一个独立的、广泛使用的 HTTP 请求库,基于 XMLHttpRequest 封装。适用于任何 React 项目(无论是否使用 Umi)。axios 的拦截器设计更灵活,支持请求和响应拦截。

相关文章:

  • 在Vue3中集成XGPlayer视频播放器的完整指南
  • 鸿蒙 Next 实现线程之间的通信
  • export HADOOP_CLASSPATH=`hadoop classpath`
  • 将大模型输出答案清洗数学公式格式为markdown文件
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(49)万鸦壶焚网络 - 网络延迟时间(Bellman-Ford)
  • 使用 Doris 和 LakeSoul
  • 蓝桥备赛(19)- 哈希表和 unordered_ set 与unordered_map(上)
  • 程序化广告行业(13/89):DSP的深入解析与运营要点
  • C++自学方法论:从零基础到工程实践的体系化路径研究
  • Leetcode:34(二分查找)
  • CNN 稠密任务经典结构
  • 【前端文件下载实现:多种表格导出方案的技术解析】
  • Linux系统下安装Gedit文本编辑器的完整指南
  • 基于YOLOv8深度学习的PCB缺陷检测识别系统【python源码+GUI界面+数据集+训练代码】
  • 跨平台直播美颜SDK开发指南:如何兼容iOS、Android与Web
  • 虚拟系统实验
  • 【redis】set 类型:基本命令
  • STM32与HAL库开发实战:深入探索ESP8266的多种工作模式
  • 《C++并发编程实战》精读总结:第四章 并发操作的同步
  • Webpack 和 Vite 的主要区别
  • 春决火爆的背后,PEL如何做大这块电竞蛋糕
  • 国家发改委:城市更新项目必须建立多元化多层级资金投入机制
  • 被央视曝光“废旧厂区沦为垃圾山”,江西萍乡成立调查组查处
  • 山东发布高温橙警:预计19日至21日局地可达40℃
  • 气急败坏!20多名台湾艺人被台当局列为“重点核查对象”
  • 盐城经济技术开发区党工委书记王旭东接受纪律审查和监察调查