今天看到一些代码,其实应该算是关于模块化相关知识范畴吧,因为用到了axios
,所以取了这么一个标题
基于axios
封装的模块如下:
fetch.js
import axios from 'axios';
// 创建axios实例
const service = axios.create({
timeout: 5000
});
//删除拦截器部分代码
export default service;
调用该模块的其他模块:
import fetch from '@/utils/fetch';
function GetFetchPromise(
url,
data = {},
type = 'get',
params = {},
headers = {},
timeout = 5000) {
return fetch({//问题在这儿
url: url,
method: type,
params: data,
data: params,
headers,
timeout
})
}
问题:
1、在调用模块里面使用 fetch({/*很多键值对*/})
,倒入进来的一个变量名fetch
这儿怎么能当作方法使用呢?
2、传进去的参数直接和覆盖fetch.js
模块axios.create()
参数是一个意思?
3、fetch.js
里面export default service;
表示导出一个模块,那么在调用模块里面怎么不是fetch.xxxx()
xxxx应为export对象的方法吧?但是axios.create()
创建的这个对象并没有fetch()
方法呀?
1,首先你要明白 import 和export的作用,
在这里
fetch.js
里实例化了一个axios实例,在需要的地方(通常是actions里)导入后之后,相当于导入了一个axios.create()
,这不过这里导入的是一个已经拥有全局参数和全局拦截器的方法。2,不明白你的意思,在导入的地方使用,没记错应该是以参数内的为准,封装的话可以省事一点,也可以配置一些全局的参数,例如请求超时,请求头,token什么的,当然还有拦截器和过滤器。
3,参考1.
以上回答,仅仅是个人理解,仅供参考,更多请参阅工具的官方文档等。