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

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生命周期,只有在两个同样是缓存的组件之间切换才会有实际的缓存效果

http://www.xdnf.cn/news/7690.html

相关文章:

  • 告别格式壁垒:用迪威模型实现 MMD 模型到 STP 的几何精准转换(附复杂发型处理技巧)
  • 九天画芯CEO张锦:AR 与 AI 融合重构智能终端生态,消费级市场迎来关键拐点
  • MCU 上电不启动的常见原因分析与排查思路
  • 2024年下半年软考系统架构设计师案例分析题
  • 【Leetcode 每日一题】3356. 零数组变换 II
  • Memory模块是agent的一个关键组件
  • 工业视觉缺陷检测的算法总结
  • SpringBoot JAR 启动原理
  • 【C++】从零认识C++的“继承”
  • 【Linux笔记】——线程池项目与线程安全单例模式
  • 【SFT监督微调总结】大模型SFT全解析:从原理到工具链,解锁AI微调的核心密码
  • JAVA虚拟机有义务保证<clinit>()方法的线程安全
  • 【工程篇】03:Miniconda安装
  • DAY31-文件的规范拆分和写法
  • 现代计算机图形学Games101入门笔记(十七)
  • Python Pandas库简介及常见用法
  • Nature 子刊排名(2025 版)
  • Java从入门到精通 - 案例专题
  • nRF Connect SDK开发之(1)环境搭建
  • 一文掌握 LoRA 常见变体
  • SpringBoot集成Jasypt对数据库连接密码进行加密、解密
  • vue2的项目登录逻辑
  • Java核心基础知识点全解析:从语法到应用实践
  • python-leetcode 69.最小栈
  • 【华为OD- B卷 - 增强的strstr 100分(python、java、c++、js、c)】
  • 连接Redis数据库
  • 初识Linux · 数据链路层
  • PyTorch图像识别模型和图像分割模型体验
  • 【Java 反射的使用】
  • (T_T),不小心删掉RabbitMQ配置文件数据库及如何恢复