react使用axios并实现二次封装

在react脚手架项目中安装axios
在这使用到了Cookies 顺手安装一个

yarn add axios js-cookie

在src下新建一个文件夹httpRequest,在里面新建index.js
封装内容如下:

import axios from "axios";
import Cookies from "js-cookie";
// 请求的时间
axios.defaults.timeout = 100000;
// 域名设置
axios.defaults.baseURL = process.env.REACT_APP_BASE_URL;
console.log("当前域名设置:" + axios.defaults.baseURL);
console.log(
  Cookies.set(
    "access_token",
 "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE5Mzc0NjM1NDIsInVzZXJfbmFtZSI6IjEzOTEx"
  )
);
/**
 * http request 拦截器
 */
axios.interceptors.request.use(
  (config) => {
    config.data = JSON.stringify(config.data);
    config.headers = {
      "Content-Type": "application/json",
      Authorization: Cookies.get("access_token"),
    };
    // 请求前处理任意逻辑

    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

/**
 * http response 拦截器
 */
axios.interceptors.response.use(
  (response) => {
    // 在返回值里面处理任意逻辑
    return response;
  },
  (error) => {
    console.log("请求出错:", error);
  }
);

//处理请求并返回promise对象
// eslint-disable-next-line import/no-anonymous-default-export
export default function (fecth, url, param) {
  return new Promise((resolve, reject) => {
    // eslint-disable-next-line default-case
    switch (fecth) {
      case "get":
        get(url, param)
          .then((data) => {
            resolve(data);
          })
          .catch((err) => {
            reject(err);
          });
        break;
      case "post":
        post(url, param)
          .then((data) => {
            resolve(data);
          })
          .catch((err) => {
            reject(err);
          });
        break;
    }
  });
}

/**
 * 封装get方法
 */
function get(url, params = {}) {
  return new Promise((resolve, reject) => {
    axios
      .get(url, {
        params: params,
      })
      .then((response) => {
        resolve(response.data);
      })
      .catch((error) => {
        reject(error);
      });
  });
}

/**
 * 封装post请求
 */
function post(url, data) {
  return new Promise((resolve, reject) => {
    axios.post(url, data).then(
      (response) => {
        resolve(response.data);
      },
      (err) => {
        reject(err);
      }
    );
  });
}

为了方便管理接口,我在src下新建一个文件夹request-apis/index.js,统一管理接口

export const getArticleList = (data) => {
  return request("post", "/apis/demo/home/list1", data);
};

export const getArticleList2 = (data) => {
  return request("post", "/apis/demo/home/list2", data);
};

然后在页面中可以直接引入和使用,示例:


import { getArticleList,getArticleList2 } from "@/request-apis/index.js";

//在生命周期中调用
componentDidMount() {
    getArticleList({
      id: 123,
    }).then(
      (res) => {
      	console.log("请求成功结果",res)
      },
      (err) => {
        console.log("请求失败",err);
      }
    );
  }
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
React使用axios进行二次封装可以更方便地进行网络请求的管理和处理。下面是一个简单的示例: 首先,在你的项目中安装axios: ``` npm install axios ``` 然后,创建一个名为`api.js`的文件,用于封装axios。在该文件中,你可以定义一些全局的请求配置和拦截器。 ```js import axios from 'axios'; const api = axios.create({ baseURL: 'http://your-api-url.com', // 设置基础URL timeout: 5000, // 设置请求超时时间 }); api.interceptors.request.use( (config) => { // 在请求发送之前进行一些处理,例如添加token等 return config; }, (error) => { // 处理请求错误 return Promise.reject(error); } ); api.interceptors.response.use( (response) => { // 在接收到响应数据之前进行一些处理 return response.data; }, (error) => { // 处理响应错误 return Promise.reject(error); } ); export default api; ``` 现在,你可以在需要发送请求的组件中导入并使用封装好的api。 ```js import React from 'react'; import api from './api'; class MyComponent extends React.Component { componentDidMount() { api.get('/users') // 发送GET请求到'/users'接口 .then((response) => { // 处理响应数据 console.log(response); }) .catch((error) => { // 处理错误 console.error(error); }); } render() { return <div>...</div>; } } export default MyComponent; ``` 这里只是一个简单的例子,你可以根据实际需要进行更复杂的封装,例如对请求错误进行统一处理、添加全局的请求头等。希望能帮到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐梦想之路_随笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值