React封装axios请求方法

1.安装Axios

首先安装axios

css 复制代码
npm install axios

2.创建request.js

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

css 复制代码
// 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 组件中使用封装好的请求方法。

css 复制代码
// 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 的拦截器设计更灵活,支持请求和响应拦截。

相关推荐
用户47949283569152 分钟前
告别span嵌套地狱:CSS Highlights API重新定义语法高亮
前端·javascript·css
无责任此方_修行中9 分钟前
一行代码的“法律陷阱”:开发者必须了解的开源许可证知识
前端·后端·开源
合作小小程序员小小店28 分钟前
web网页开发,在线物流管理系统,基于Idea,html,css,jQuery,jsp,java,SSM,mysql
java·前端·后端·spring·intellij-idea·web
GISer_Jing1 小时前
OSG底层从Texture读取Image实现:readImageFromCurrentTexture
前端·c++·3d
Charles_go1 小时前
C#8、有哪些访问修饰符
java·前端·c#
慧一居士1 小时前
Vue中 class 和 style 属性的区别对比
前端·vue.js
九章云极AladdinEdu2 小时前
项目分享|告别枯燥命令行,构建终端用户界面的 TypeScript 库
javascript·ui·typescript
oil欧哟3 小时前
文心 5.0 来了,百度大模型的破局之战
前端·人工智能·百度·prompt
东华帝君3 小时前
react 切片 和 优先级调度
前端
洞窝技术3 小时前
Next.js 不只是前端框架!我们用它搭了个发布中枢,让跨团队协作效率翻倍
前端·next.js