news 2026/4/23 12:42:27

Vue动态组件以及keep-alive的使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue动态组件以及keep-alive的使用

文章目录

  • 一、动态组件
    • 1Vue的动态组件用法
  • 二、keep-alive
    • 2.1基础用法概念
    • 2.2包含include和排除exclude属性
    • 2.3 最大缓存实例数
    • 2.4 缓存实例的生命周期

一、动态组件

1Vue的动态组件用法

<template><divclass="app-container"><h1>App 根组件</h1><hr/><button @click="comName = 'Left' ">展示Left组件</button><button @click="comName = 'Right' ">展示Right组件</button><divclass="box"><!--渲染 Left 组件和 Right 组件--><keep-alive><component:is="comName"></component></keep-alive></div></div></template><script>importLeftfrom'@/components/Left.vue'importRightfrom'@/components/Right.vue'exportdefault{data(){return{comName:'Left'}},components:{Right,Left},}</script>

核心就是用Vue官方内置的标签做组件占位符,它得配合:is动态绑定属性来用,:is的值必须是当前组件里注册过的子组件名,这样才能渲染对应的组件。而components是组件里的配置项,作用就是注册子组件,不管是用动态渲染,还是直接写组件标签用,都得先在这个配置项里注册导入的子组件,这是Vue的硬性规则,不注册的话Vue就不认识组件会报错。然后实现组件切换的话,就是给按钮绑@click点击事件,事件里直接写赋值语句修改:is绑定的那个变量就行,不用写methods,因为只是简单改值,这种内联写法就够用,点击按钮修改变量值,变量一变,:is的绑定值跟着变,页面就自动切换渲染对应的组件了,初始给变量赋哪个组件名,页面就默认渲染哪个组件,要是点了对应已渲染组件的按钮,变量值没变化,组件就不会有任何改动。还有Vue默认切换动态组件时,被隐藏的组件会被销毁,切回去又会重新创建,组件里的状态比如输入框内容就会丢,所以要给包一层Vue官方的内置标签keep-alive,它的作用就是缓存被切换隐藏的组件,不让组件销毁,保留组件的状态,下次切回来直接用缓存的组件就行,不用重新创建,这俩内置标签搭配用就是动态组件的最佳实践,要是不在乎状态丢失,也可以不加keep-alive。

二、keep-alive

2.1基础用法概念

当使用 <component :is="..."> 来在多个组件间作切换时,被切换掉的组件会被卸载。

是一个内置组件,它的功能是在多个组件间动态切换时缓存被移除的组件实例。
同样也是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在组件的父组件链中。
我们可以通过 组件强制被切换掉的组件仍然保持“存活”的状态

<!--失活的组件将会被缓存!--><keep-alive><component v-bind:is="currentTabComponent"></component></keep-alive>

2.2包含include和排除exclude属性

  1. 默认缓存内部所有组件,可通过include/exclude按需控制,按组件名匹配生效
  2. include:白名单,仅写在此处的组件会被缓存
  3. exclude:黑名单,写在此处的组件不缓存,其余正常缓存
  4. 用法场景:组件少、需缓存的少→用include;组件多、仅少数不缓存→用exclude(更高效)
  5. 二者不同时用,exclude优先级高于include
<!--逗号分隔字符串--><keep-alive include="a,b"><component:is="view"></component></keep-alive><!--正则表达式(使用`v-bind`)--><keep-alive:include="/a|b/"><component:is="view"></component></keep-alive><!--数组(使用`v-bind`)--><keep-alive:include="['a', 'b']"><component:is="view"></component></keep-alive>

2.3 最大缓存实例数

eep-alive的max属性核心要点

  1. max 用来限制缓存的组件实例最大数量,需通过 v-bind 绑定数字
  2. 超出max值时,按LRU规则销毁缓存:删掉最久未被访问的组件实例,为新组件腾空间
  3. 避免缓存过多组件占用内存,适合动态切换组件数量多的场景
<KeepAlive:max="10"><component:is="activeComponent"/></KeepAlive>

2.4 缓存实例的生命周期

当一个组件实例从 DOM 上移除,但因为被 缓存而仍作为组件树的一部分时,它将变为不活跃状态而不是被卸载。

当一个组件实例作为缓存树的一部分插入到 DOM 中时,它将重新被激活。

一个持续存在的组件可以通过activated() 和deactivated()注册相应的两个状态的生命周期钩子
当组件第一次被创建的时候,既会执行 created 生命周期,也会执行 activated 生命周期 当组件再次被激活的时候,只会触发
activated 生命周期,不再触发 created。因为组件没有被重新创建

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:36:58

超市管理|基于ssm 超市管理系统(源码+数据库+文档)

超市管理 目录 基于ssm vue超市管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于ssm vue超市管理系统 一、前言 博主介绍&#xff1a;✌️大厂码农|毕设布道…

作者头像 李华
网站建设 2026/4/23 11:34:53

AI写论文哪个软件最好?宏智树AI凭全流程合规硬核领跑毕业季

作为深耕论文写作科普的教育测评博主&#xff0c;毕业季后台每天都被“AI写论文选哪个”的提问刷屏。不少同学踩过“AI生成内容文献造假”“数据无溯源被导师质疑”“格式混乱反复修改”的坑&#xff0c;实则选对工具&#xff0c;毕业论文写作能少走80%的弯路。 实测多款主流A…

作者头像 李华
网站建设 2026/4/23 11:36:36

小程序计算机毕设之基于SpringBoot与微信小程序的乡镇医院挂号预约系统基于springboot的医院门诊智能预约平台小程序设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/18 15:54:33

LangGraph--StateGraph

1. StateGraph 是什么&#xff1f; StateGraph 是一个 图构建器&#xff0c;它本身不执行&#xff0c;只负责&#xff1a; 定义状态结构定义节点逻辑定义节点之间的顺序 / 条件分支 / 路由定义上下文 Context定义输入输出 Schema ⚠️ 注意&#xff1a;StateGraph 不能直接运…

作者头像 李华
网站建设 2026/4/15 18:16:18

基于springboot的救援物资管理系统-计算机毕业设计源码+LW文档

基于SpringBoot的救援物资管理系统 摘要&#xff1a;本文围绕基于SpringBoot的救援物资管理系统展开&#xff0c;阐述了其研究背景意义、需求分析及功能设计。随着灾害事件频发&#xff0c;救援物资管理的重要性日益凸显&#xff0c;传统管理方式存在诸多弊端&#xff0c;该系统…

作者头像 李华
网站建设 2026/4/6 14:10:09

国标GB28181安防监控平台EasyCVR油田油井智能监管体系构建与应用实践

随着油气勘探开发向深层、偏远区域延伸&#xff0c;油田油区呈现出油水井点多面广、管网纵横交错、作业环境复杂等显著特征。传统监控模式已难以适配安全生产、高效运维的核心需求。随着工业物联网与智能视频分析技术的成熟&#xff0c;构建一个统一、智能的远程视频监控平台成…

作者头像 李华