Vue中怎么给axios请求加缓存避免重复调用?
我在做商品详情页,每次切换tab都会重新请求相同的数据,明明数据没变却反复发请求,很浪费。试过用sessionStorage手动存,但感觉不够优雅,有没有更自动的方式?
现在代码是这样的:
<script setup>
import { ref, onMounted } from 'vue'
import axios from 'axios'
const product = ref(null)
onMounted(async () => {
const res = await axios.get('/api/product/123')
product.value = res.data
})
</script>
想在不改太多结构的前提下,给这个请求加上缓存,比如5分钟内相同URL就直接返回缓存结果,该怎么做?
先创建一个
cachedAxios.js文件:然后在你的组件里这么用:
这个写法优雅多了吧?把缓存逻辑抽离出来,不用每个请求都手动处理sessionStorage。而且以后想改缓存策略也方便,比如改成LRU之类的。
说实话,这种小封装能让你省不少事,还能保持代码整洁。开发就该这样,能偷懒的地方就别硬抗。