vue3实现跨页面缓存

避免频繁向后端发送请求,vue3中,可以用缓存机制,为了实现跨页面缓存,可以把缓存放到localsotrage里面

关键代码:

const globalCache = JSON.parse(localStorage.getItem('globalCache')) || {};

然后加一个forceRefresh关键字,

const fetchData = async (forceRefresh = false) => {

const cacheKey = `{userId.value}-{currentPage.value}-${pageSize.value}`;

if (!forceRefresh && globalCachecacheKey) {

myStores.value = globalCachecacheKey.data;

totalCount.value = globalCachecacheKey.total_count;

return;

}

让缓存从globalCache里面取,

完整代码:

javascript 复制代码
<template>
  <!-- 清空缓存按钮 -->
  <router-link to="/home" custom v-slot="{ navigate }">
    <van-button 
      type="default" 
      @click="
        // 清空全局缓存对象的所有属性
        Object.keys(globalCache).forEach(key => delete globalCache[key]);
        // 强制刷新数据(跳过缓存)
        fetchData(true);
        navigate();
      " 
      size="small"
    >
      打卡店铺
    </van-button>
  </router-link>
</template>

<script setup>
// 缓存系统核心实现
// ------------------------------------------------------------------
// 初始化全局缓存:从 localStorage 加载已有缓存或创建空对象
const globalCache = JSON.parse(localStorage.getItem('globalCache')) || {};

// 缓存更新方法
const updateCache = (cacheKey, data) => {
  // 将新数据存入缓存对象
  globalCache[cacheKey] = data;
  // 同步更新到 localStorage 持久化存储
  localStorage.setItem('globalCache', JSON.stringify(globalCache));
};

// 清空缓存方法
const clearCache = () => {
  // 遍历删除缓存对象所有属性
  Object.keys(globalCache).forEach(key => delete globalCache[key]);
  // 清除 localStorage 中的持久化存储
  localStorage.removeItem('globalCache');
};

// 数据获取逻辑(带缓存机制)
const fetchData = async (forceRefresh = false) => {
  // 生成当前请求的缓存键(用户ID+分页参数)
  const cacheKey = `${userId.value}-${currentPage.value}-${pageSize.value}`;
  
  // 缓存命中逻辑(当非强制刷新且存在有效缓存时)
  if (!forceRefresh && globalCache[cacheKey]) {
    // 从缓存读取数据
    myStores.value = globalCache[cacheKey].data;
    totalCount.value = globalCache[cacheKey].total_count;
    return;
  }

  // 无有效缓存时发起网络请求
  const response = await axios.get(`${baseURL}/query_store/${userId.value}?page=${currentPage.value}&pageSize=${pageSize.value}`);
  
  // 更新响应数据到缓存系统
  updateCache(cacheKey, {
    data: response.data.data,
    total_count: response.data.total_count,
  });
};

// 路由导航守卫(控制页面离开时的缓存清理)
onBeforeRouteLeave((to, from, next) => {
  // 仅当跳转到信息填报页面时保留缓存
  if (to.name === 'informationFill') {
    next();
  } else {
    // 其他路由跳转时清空缓存
    clearCache();
    next();
  }
});
</script>
相关推荐
Together_CZ7 小时前
DeepSeek-V4.1-Flash:Pushing the Limits of KV Cache Compression——推动 KV 缓存压缩的极限
缓存·llm·compression·kv cache·deepseek·v4.1-flash·推动 kv 缓存压缩的极限
Pioneer0000116 小时前
我用 Redis + 网关做多模型 API 路由:缓存命中率 95%+ 的工程实践
人工智能·redis·后端·缓存·性能优化·架构
hweiyu001 天前
Redis命令:MSETNX
redis·缓存
wdfk_prog1 天前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros
是Dream呀2 天前
Harness 工程:让 Agent 真正把任务做完
人工智能·分布式·缓存·agent
溪语流沙2 天前
Django + Vue电商项目第001讲:开篇|注册登录加增删改查,那不是电商
redis·python·mysql·docker·typescript·django·vue
努力努力再努力wz2 天前
【Redis进阶系列】:从主从复制到 Sentinel,一文建立故障检测、Leader 选举与 Failover 的完整心智模型
数据库·redis·缓存
程序员阿黄2 天前
基于 Django 与 Vue 3 的智能实验室预约系统设计与实现
后端·python·mysql·django·vue·毕设
.Hypocritical.2 天前
Vue CLI(vue-cli)和 Vite 超详细对比
vue
志尊宝3 天前
Vue3 零基础每日笔记(040):Vite 创建 Vue3 + TS 项目——企业标配从这一篇开始
笔记·vue·html·前端开发·软件开发