React二次封装

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。在实际的项目中,我们一般会进行二次封装。

一、创建.env文件

1.(.env.development)

REACT_APP_API_URL = 'https://goods.zzgoodqc.cn/'//接口前缀
REACT_APP_MODE = "development"

2.(.env.production)

REACT_APP_MODE = 'production'
REACT_APP_API_URL = 'https://goods.zzgoodqc.cn/'//接口前缀

二、在src目录中创建(utils)文件夹

在utils文件夹中创建一个(axios.js)文件这个是一次封装

import axios from 'axios';

axios.defaults.timeout = 30000;

// 修正:使用 REACT_APP_API_URL
if (process.env.REACT_APP_API_URL) {
    axios.defaults.baseURL = process.env.REACT_APP_API_URL;
} else {
    console.error('API URL未定义,请检查环境变量'); // 这句报错就是因为之前变量名错误
}

// 修正:使用 REACT_APP_API_TOKEN
if (process.env.REACT_APP_API_TOKEN) {
    axios.defaults.headers.common['Authorization'] = `Bearer ${process.env.REACT_APP_API_TOKEN}`;
}

// 添加请求拦截器
axios.interceptors.request.use(
    config => {
        // 修正:使用 REACT_APP_MODE
        if (process.env.REACT_APP_MODE === 'development') {
            console.log('开发环境请求');
        } else if (process.env.REACT_APP_MODE === 'test') {
            console.log('测试环境请求');
        } else {
            console.log('正式环境请求');
        }
        return config;
    },
    error => Promise.reject(error)
);

export const request = (options) => {
    return new Promise((resolve, reject) => {
        const config = {
            url: options.url,
            method: options.method || 'GET',
            headers: options.headers || {}, // 确保 headers 能正确合并
            [options.method.toLowerCase() === 'get' ? 'params' : 'data']: options.data || {},
        };
        axios(config)
            .then((res) => {
                resolve(res.data);
            })
            .catch((err) => {
                // 提供更详细的错误信息
                reject({
                    message: err.message,
                    response: err.response
                });
            });
    });
};

三、进行二次封装在在utils文件夹中再次创建一个(api.js)

import {
	request
} from './axios';//引入一次封装
 
// 登录接口
export const newsList = (data) => {
	return request({
		url: '/index.php/index/news/newsList',//接口的后半部分
		method: 'post',
		data: data
	});
};
 
 
 

这样React的axios请求封装就完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值