LocalStorage缓存数据在Vue中怎么避免重复请求?
我用localStorage缓存了用户信息,但每次刷新页面还是会重新请求接口,明明缓存里已经有数据了,是不是哪里写错了?
我试过在created里判断localStorage有没有user,有就直接用,没有才发请求,但好像没生效。
<script>
export default {
data() {
return { user: null }
},
created() {
const cached = localStorage.getItem('user');
if (cached) {
this.user = JSON.parse(cached);
} else {
this.fetchUser(); // 这个还是会执行
}
},
methods: {
async fetchUser() {
const res = await api.getUser();
this.user = res.data;
localStorage.setItem('user', JSON.stringify(this.user));
}
}
}
</script>
你也可以尝试在fetchUser方法中加一个标志位,防止重复请求。比如在data里加一个isLoading的状态,初始值为false,在请求开始时设置为true,请求结束后设置回false。这样可以避免多次触发请求。
还有,确保你的api.getUser()方法返回的数据结构是你期望的,有时候接口返回的数据可能不符合预期,导致你认为数据没有被正确赋值。
试试下面这个修改后的代码,我在里面加了一个isLoading的标志位,防止重复请求:
这样改了之后应该能有效防止重复请求了。如果问题依然存在,检查一下浏览器的控制台是否有错误信息,有时候错误信息会给你一些提示。
检查两件事:
1. 确认存和取的key完全一致(你代码里都是user,应该没问题)
2. 可能是JSON.parse报错了,整个if判断失效
改一下,加个容错:
懒人方案:你可以直接打开浏览器DevTools的Application面板,看看localStorage里user那个key实际存了什么值,一目了然。