react配置axios
配置axios之前设置一下代理,可以用来解决跨域问题
在package.json中添加一行代理设置,在新版的react中,proxy不再是对象形式,变成了string形式,如果按照之前的写法就会报错
新版写法
"proxy": "https://192.168.1.1/api"
然后就是axios的配置
原型
相比于常见的引入写法我个人比较习惯将axios挂载到原型上来使用(Vue中也是如此),但是在react中不是直接向React原型挂载而是想React.component的原型上挂载
在index.js中进行如下配置
import axios from 'axios'
// 配置axios
axios.defaults.baseURL = '/api'
// 配置请求拦截
axios.interceptors.request.use(
config => {
config.headers.Authorization = window.localStorage.getItem('token')
return config;
},
err => {
return Promise.reject(err);
}
);
// 添加响应拦截器
axios.interceptors.response.use(
function (response) {
console.log(response);
return response;
},
function (error) {
// 对响应错误做点什么
return Promise.reject(error);
}
);
React.Component.prototype.$http = axios
在使用时,只要是继承Component创建的组件都可以直接通过this.$http
来使用axios的方法,如
getList() {
this.$http.get('/wbbr/bgeda').then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
}
componentDidMount() {
this.getList()
}
在componentDidMount
生命周期调用请求数据的方法
导入
还有比较经典的方法就是通过一个js文件来封住axios,然后导出HTTP方法,需要请求的时候导入方法
import axios from "axios";
axios.defaults.timeout = 100000;
axios.defaults.baseURL = "http://test.mediastack.cn/";
/**
* http request 拦截器
*/
axios.interceptors.request.use(
(config) => {
config.data = JSON.stringify(config.data);
config.headers = {
"Content-Type": "application/json",
};
return config;
},
(error) => {
return Promise.reject(error);
}
);
/**
* http response 拦截器
*/
axios.interceptors.response.use(
(response) => {
return response;
},
(error) => {
console.log("请求出错:", error);
}
);
/**
* 封装get方法
* @param url 请求url
* @param params 请求参数
* @returns {Promise}
*/
export function get(url, params = {}) {
return new Promise((resolve, reject) => {
axios.get(url, {
params: params,
}).then((response) => {
landing(url, params, response.data);
resolve(response.data);
})
.catch((error) => {
reject(error);
});
});
}
/**
* 封装post请求
* @param url
* @param data
* @returns {Promise}
*/
export function post(url, data) {
return new Promise((resolve, reject) => {
axios.post(url, data).then(
(response) => {
//关闭进度条
resolve(response.data);
},
(err) => {
reject(err);
}
);
});
}
/**
* 封装patch请求
* @param url
* @param data
* @returns {Promise}
*/
export function patch(url, data = {}) {
return new Promise((resolve, reject) => {
axios.patch(url, data).then(
(response) => {
resolve(response.data);
},
(err) => {
msag(err);
reject(err);
}
);
});
}
/**
* 封装put请求
* @param url
* @param data
* @returns {Promise}
*/
export function put(url, data = {}) {
return new Promise((resolve, reject) => {
axios.put(url, data).then(
(response) => {
resolve(response.data);
},
(err) => {
msag(err);
reject(err);
}
);
});
}
在使用时
import {get} from '../http.js'
getList() {
get('/wbbr/bgeda').then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
}
componentDidMount() {
this.getList()
}