vue3实现跨页面缓存

server/2025/3/16 21:59:02/

避免频繁向后端发送请求,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 && globalCache[cacheKey]) {

        myStores.value = globalCache[cacheKey].data;

        totalCount.value = globalCache[cacheKey].total_count;

        return;

    }

缓存从globalCache里面取,
完整代码:
 

<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>


http://www.ppmy.cn/server/175534.html

相关文章

Spring Boot集成HikariCP:原理剖析与实战指南

一、HikariCP连接池的底层实现剖析 1. 连接池核心数据结构 HikariCP的核心数据结构采用ConcurrentBag与FastList实现高性能并发管理&#xff1a; &#xff08;1&#xff09;ConcurrentBag 无锁设计&#xff1a;通过ThreadLocal缓存和CopyOnWriteArrayList实现高并发下的高效…

3.12-1 html讲解

一、html介绍 1、定义&#xff1a;一个超文本标记语言&#xff0c;不是一种编程性语言 2、标记&#xff1a;记号&#xff08;绰号&#xff09; 3、超文本&#xff1a;就是页面内容包含图片、链接、音乐、视频等素材 4、为什么学习html&#xff1f;a测试页面功能&#xff0c…

Microsoft Dragon Copilot:医疗AI革命开启,用语音终结手写病历时代

微软正式发布全球首个医疗行业一体化语音AI助手Microsoft Dragon Copilot,标志着临床工作流程正式迈入“人机协作”新时代。这款工具通过语音+文本混合架构,将医生口述内容实时转化为结构化病历,并深度整合电子健康记录(EHR)系统,彻底颠覆了传统手写病历模式。根据微软官…

【QT】-解析打包json

在 Qt 中&#xff0c;接收到 JSON 字符串后&#xff0c;可以通过 QJsonDocument 来解析 JSON 数据&#xff0c;获取字段值。同时&#xff0c;可以使用 QJsonDocument 将数据打包成 JSON 字符串&#xff0c;然后发送到 RabbitMQ 或其他地方。这个方法在 Qt 中非常常见且稳定。 …

Java基础语法练习42(基本绘图-基本的事件处理机制-小坦克的绘制-键盘控制坦克移动)

目录 一、图形的基本绘制 1.基本介绍&#xff1a; 2.入门代码如下&#xff1a; 3.常用图形的绘制, 示例代码如下&#xff1a; 二、坦克的绘制 三、事件处理机制 四、坦克的移动 一、图形的基本绘制 1.基本介绍&#xff1a; Component 类提供了两个和绘图相关最重要的方…

CentOS系统中使用sendmail

在CentOS系统中&#xff0c;如果你想要使用sendmail来发送电子邮件&#xff0c;你可以通过以下步骤来配置和测试它。sendmail是Linux系统上常用的邮件传输代理&#xff08;MTA&#xff09;&#xff0c;它可以用来发送邮件。 步骤1&#xff1a;安装sendmail 首先&#xff0c;你…

常见的死锁情况分析

死锁 定义&#xff1a; 是指多个进程或线程在执行过程中&#xff0c;由于竞争资源或因通信的需要而产生的相互等待的状态&#xff0c;使得它们无法继续执行下去&#xff08;单线程中使用不恰当也会导致死锁问题&#xff09;。 如下为常见的死锁原因&#xff1a; a. 互斥条件…

股指期货的锁仓是什么意思?

股指期货锁仓是指投资者在持有某一方向仓位的同时&#xff0c;反向开立一个数量相等但方向相反的仓位。这种操作类似于给持仓“上锁”&#xff0c;无论市场价格如何波动&#xff0c;锁仓后的盈亏状态都不会再发生变化。锁仓的主要目的是在不确定的市场环境下&#xff0c;锁定当…