一、实例为什么引入axios实例?不是有axios()可以用吗? 因为,直接使用axios时,是全局的使用,当url的服务器地址不一样时,即跨域请求,那么就需要修改全局的配置了,这样很麻烦。 于是,使用实例的Axios,即局部...
一、实例
为什么引入axios实例?不是有axios()可以用吗?
因为,直接使用axios时,是全局的使用,当url的服务器地址不一样时,即跨域请求,那么就需要修改全局的配置了,这样很麻烦。
于是,使用实例的Axios,即局部的axios实例。
axios实例基本使用:
// ./src/main.js
const instance1 = axios.create({
baseURL:'http://127.0.0.0',
timeout : 3000
});
const instance2 = axios.create({
baseURL:'http://56.1.4.1',
timeout : 3000
});
instance1({
url: '/get',
}).then(res =>{
console.log(res);
});
instance2({
url: '/get',
}).then(res =>{
console.log(res);
});
即,使用axios.create({//配置信息}),创建一个实例,传入配置参数,需要在发送网络请求的时候,直接调用这个实例,一个实例就对应一个服务器的地址。
二、axios模块封装
为什么引入axios模块封装?
因为,每个组件都可能有发送网络请求的情况,开发中会给每个组件的created()声明周期函数里面添加请求代码,如果要给每个组价都写这个请求代码,那么迭代技术的时候就难维护。
所以,需要把这些发送请求的代码部分抽离出来,封装再导入。
网络请求封装思路:
在./src下创建目录network,里面写网络请求的代码
例如, ./src/network/request.js:
//./src/network/request.js
import axios from 'axios';
export function requset(config, success, failure){
const instance1 = axios.create({
baseURL: 'http://httpbin.org',
timeout : 5000
});
instance1(config).then( res=> {
console.log(res);
success(res);//data processing
}).catch(err => {
console.log('err');
failure(err);
});
};
随后,在main.js中导入这个function,调用并发送网络请求配置,回调函数等。
注意,request接收的参数,success、failure都是回调函数,因为,不能在网络请求的代码部分,写一些数据处理的代码,所以就把这些代码"回调" 出去。
// ./src/main.js
import {Request} from './network/request';
Request({ url: '/get'},
res =>{ console.log(res)},
err =>{ console.log(err)}
);
当然,也可以使用Promise进行封装,把网络请求代码和处理数据代码分离开,即:
高级写法:
// ./src/network/request.js
import axios from 'axios';
export function request(config){
const instance1 = axios.create({
baseURL: 'http://httpbin.org',
timeout : 5000
});
return instance1(config);
}
// ./src/main.js
import {request} from './network/request';
request({
baseConfig: { url: '/get'},
success: (res)=>{ console.log(res)},
failure: (err)=>{ console.log(err)},
}).then(...).catch(...)
因为,axios.create()是经过Promise封装的,它执行的结果本身就返回一个 new Promise(),所以,这里直接返回instance实例;
另外,config是封装了 baseConfig、success、failure
本文标题为:Axios 实例与模块封装
基础教程推荐
- IOS获取系统相册中照片的示例代码 2023-01-03
- iOS中如何判断当前网络环境是2G/3G/4G/5G/WiFi 2023-06-18
- Flutter进阶之实现动画效果(三) 2022-10-28
- iOS开发 全机型适配解决方法 2023-01-14
- iOS Crash常规跟踪方法及Bugly集成运用详细介绍 2023-01-18
- MVVMLight项目Model View结构及全局视图模型注入器 2023-05-07
- Android实现短信验证码输入框 2023-04-29
- iOS开发使用XML解析网络数据 2022-11-12
- Android开发Compose集成高德地图实例 2023-06-15
- Android Compose自定义TextField实现自定义的输入框 2023-05-13