vue 数据请求应该封装到公用组件里面吗?比如说有一个下拉框,会从服务端拉取下拉选项,很多地方都会用到,于是就把请求封装进去。但是有一个问题,在同一个页面多次使用这个下拉框的时候,该请求会被请求多次。但是其实理论上只要获取一次接口就好,有点矛盾啊。
vue 数据请求应该封装到公用组件里面吗?比如说有一个下拉框,会从服务端拉取下拉选项,很多地方都会用到,于是就把请求封装进去。但是有一个问题,在同一个页面多次使用这个下拉框的时候,该请求会被请求多次。但是其实理论上只要获取一次接口就好,有点矛盾啊。
可以看一下单例模式
可能你之前是这样调用的,每次创建组件都会请求
function fetchList(){
// 请求接口 返回promise
}
default exports {
data(){
return: {
list: []
}
},
created() {
fetchList().then(res => {
this.list = res
})
}
}
利用promise
的特性小改一下就行了
function fetchList(){
// 请求接口 返回promise
}
const promiseList = fetchList()
default exports {
data(){
return: {
list: []
}
},
created() {
promiseList.then(res => {
this.list = res
})
}
}
上面这个是在初始化的时候调用一次,不想初始化调用可以使用懒汉式的单例
let promiseResult = null
function fetchList(){
if(promiseResult) return promiseResult
else {
return (promiseResult = 请求接口 返回promise)
}
}
// 第一次调用才会请求接口,后续调用使用缓存的promise
fetchList()
fetchList()
fetchList()
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
2 回答4.8k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
4 回答1.9k 阅读✓ 已解决
每个组件都获取一次,当然会有很多次。放到各组件都能访问的地方,就可以只取一次。
vuex就提供了这个便利,你可以actions里放请求,如果检查到已经获取,就不再重新获取。