当前位置: 首页 > news >正文

vue3中RouterView配合KeepAlive实现组件缓存

KeepAlive组件缓存

  • 为什么需要组件缓存
  • 代码展示
  • 缓存效果
  • 为什么不用v-if

为什么需要组件缓存

业务需求:一般是列表页面通过路由跳转到详情页,跳转回来时,需要列表页面展示上次展示的内容

代码展示

App.vue入口

<script setup lang="ts">
import { RouterView, RouterLink } from "vue-router"
</script><template><div><RouterLink to="/">home</RouterLink><RouterLink to="/about">about</RouterLink></div><div><RouterView v-slot="{ Component }">// AboutComponent是组件的名称,vue4组件中通过defineOptions定义<KeepAlive include="AboutComponent"><component :is="Component" /></KeepAlive></RouterView></div>
</template>

home.vue组件

<template><div>home</div>
</template><script setup lang="ts">
import { onMounted } from "vue"
defineOptions({name: "HomeComponent",
})
onMounted(() => {console.log("home onMounted")
})
</script>

about.vue组件

<template><div>about</div>
</template><script setup lang="ts">
import { onMounted } from "vue"
defineOptions({name: "AboutComponent",
})
onMounted(() => {console.log("about onMounted")
})
</script>

缓存效果

1、home和about组件首次加载都会执行onMounted生命周期,但是对about组件进行了缓存,再次切换到about组件,就不会重新初始化,就不会执行onMounted生命周期。
2、keepalive使用include和exclude实现缓存的好处是:只要被缓存的组件首次加载之后,无论在缓存组件之间切换,还是缓存组件与未缓存组件之间切换,都不会重新挂载。

为什么不用v-if

网络上经常使用就是如下代码:

<keep-alive><router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view> 

虽然也能实现页面缓存,但是从非缓存组件切换到缓存组件时,会重新挂载缓存组件,从而再次执行onMounted生命周期,只有在两个同样是缓存的组件之间切换才会有实际的缓存效果

相关文章:

  • JavaWeb 开发流程
  • 阿里发布扩散模型Wan VACE,全面支持生图、生视频、图像编辑,适配低显存~
  • LeetCode-链表-反转链表+链表的中间结点
  • Android Handler/Looper线程管理实战攻略:从零到企业级开发
  • Java详解LeetCode 热题 100(18):LeetCode 73. 矩阵置零(Set Matrix Zeroes)详解
  • 【面试题】Session 和 Cookie 的区别
  • C++之内存分配new与 delete
  • 云计算与大数据进阶 | 28、存储系统如何突破容量天花板?可扩展架构的核心技术与实践—— 分布式、弹性扩展、高可用的底层逻辑(下)
  • 计算机网络学习(一)—— OSI vs TCP/IP网络模型
  • 【Linux】第二十五章 运行容器
  • 量子计算与云计算的融合:技术前沿与应用前景
  • COMPUTEX 2025 | 广和通创新解决方案共筑AI交互新纪元
  • Ubuntu 20.04卸载并重装 PostgreSQL
  • 【算法创新+设计】灰狼算法GWO+扰动算子,求解大规模TSP问题利器
  • 基于python的机器学习(七)—— 数据特征选择
  • (八)深度学习---计算机视觉基础
  • 大语言模型 16 - Manus 超强智能体 Prompt分析 原理分析 包含工具列表分析
  • 【notepad++如何设置成中文界面呢?】
  • 通信协议详解(分层技术解析)
  • vue3使用 Tailwind CSS (4.多版本)
  • 做网站有什么好书籍/网络舆情分析研判报告
  • 分销网站建设/最新网站查询工具
  • 烟台网站建设哪家服务好/百度推广开户渠道公司
  • 永嘉营销网站建设/成都网站快速优化排名
  • 域名备案好了后怎么做网站/关键词优化排名费用
  • 临沂网站建设服务/企业网络规划设计方案