Vue 中的 keep-alive 组件

Vue 中的 keep-alive 组件

keep-alive是 Vue 内置的一个抽象组件,用于缓存不活动的组件实例,而不是销毁它们。这可以保留组件状态或避免重新渲染,从而提升性能。

核心特性

  1. 组件状态保持:当组件在<keep-alive>中切换时,其状态会被保留
  2. 避免重复渲染:缓存的组件不会重新创建,减少 DOM 操作
  3. 生命周期变化:添加了特殊的生命周期钩子

基本用法

<template> <div> <button @click="currentTab = 'TabA'">Tab A</button> <button @click="currentTab = 'TabB'">Tab B</button> <keep-alive> <component :is="currentTab"></component> </keep-alive> </div> </template> <script> export default { data() { return { currentTab: 'TabA' } }, components: { TabA: { template: '<div>Tab A Content <input placeholder="输入会被保留" /></div>' }, TabB: { template: '<div>Tab B Content</div>' } } } </script>

配置属性

1.include- 指定缓存组件
<!-- 字符串(逗号分隔) --> <keep-alive include="ComponentA,ComponentB"> <component :is="currentComponent"></component> </keep-alive> <!-- 正则表达式 --> <keep-alive :include="/ComponentA|ComponentB/"> <component :is="currentComponent"></component> </keep-alive> <!-- 数组 --> <keep-alive :include="['ComponentA', 'ComponentB']"> <component :is="currentComponent"></component> </keep-alive>
2.exclude- 排除不缓存组件
<keep-alive exclude="ComponentC"> <component :is="currentComponent"></component> </keep-alive>
3.max- 最大缓存实例数(Vue 2.5.0+)
<keep-alive :max="10"> <component :is="currentComponent"></component> </keep-alive>

生命周期钩子

<keep-alive>包裹的组件会获得两个额外的生命周期钩子:

activated
  • 组件被激活时调用
  • 当组件第一次渲染和每次从缓存中重新激活时都会触发
deactivated
  • 组件被停用时调用
  • 当组件被缓存时触发
<script> export default { name: 'MyComponent', activated() { console.log('组件被激活,恢复状态') // 例如:重新开始定时器 this.startTimer() }, deactivated() { console.log('组件被停用,进入缓存') // 例如:清除定时器 this.clearTimer() }, methods: { startTimer() { this.timer = setInterval(() => { console.log('定时器执行') }, 1000) }, clearTimer() { if (this.timer) { clearInterval(this.timer) } } }, // 传统生命周期依然有效 created() { console.log('created - 只在第一次创建时调用') }, mounted() { console.log('mounted - 只在第一次挂载时调用') } } </script>

与 Vue Router 结合使用

<template> <div id="app"> <!-- 缓存包含的路由组件 --> <keep-alive> <router-view v-if="$route.meta.keepAlive"></router-view> </keep-alive> <!-- 不缓存的路由组件 --> <router-view v-if="!$route.meta.keepAlive"></router-view> </div> </template>
// router.jsconstroutes=[{path:'/home',component:Home,meta:{keepAlive:true// 需要缓存}},{path:'/detail/:id',component:Detail,meta:{keepAlive:false// 不需要缓存}}]

高级用法示例

动态决定是否缓存
<template> <keep-alive :include="cachedComponents"> <router-view></router-view> </keep-alive> </template> <script> export default { data() { return { cachedComponents: [] // 动态维护需要缓存的组件名 } }, watch: { '$route'(to, from) { // 根据路由规则动态添加/移除缓存 if (to.meta.keepAlive && !this.cachedComponents.includes(to.name)) { this.cachedComponents.push(to.name) } } } } </script>
配合 transition 使用
<transition name="fade" mode="out-in"> <keep-alive> <component :is="currentComponent"></component> </keep-alive> </transition>

实现原理

keep-alive内部维护一个缓存对象,主要流程:

  1. 首次渲染时,创建组件实例并缓存
  2. 组件切换时,将当前组件标记为deactivated并隐藏
  3. 再次切回时,从缓存中取出实例,标记为activated并显示
  4. 使用 LRU(最近最少使用)算法管理缓存(当使用max时)

注意事项

  1. 组件必须有 name 选项includeexclude属性通过组件名匹配
  2. 避免内存泄漏:合理设置max,及时清理不需要的缓存
  3. 状态一致性:确保activated中恢复的状态是正确的
  4. 异步组件:同样支持,但需要注意加载时机
  5. 与 v-for 使用:不推荐同时使用,可能会导致缓存混乱

适用场景

  1. 标签页切换:保持每个标签页的状态
  2. 表单页面:离开后返回,表单数据不丢失
  3. 列表页 → 详情页:返回列表页时保持滚动位置和过滤条件
  4. 需要大量计算或网络请求的组件:避免重复计算/请求

Vue 3 中的变化

在 Vue 3 中,keep-alive的使用方式类似,但有细微变化:

  • includeexclude支持组件实例的namesetup函数中的name
  • 不再支持缓存<keep-alive>的直接子元素数组
<!-- Vue 3 --> <router-view v-slot="{ Component }"> <keep-alive> <component :is="Component" v-if="$route.meta.keepAlive" /> </keep-alive> <component :is="Component" v-if="!$route.meta.keepAlive" /> </router-view>

keep-alive是 Vue 中优化组件性能的重要工具,合理使用可以显著提升用户体验,特别是在需要保持组件状态的场景中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1210042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026年教育资源好的学习机品牌推荐:基于多学段实测评价,针对内容质量与个性化痛点精准指南

在数字化浪潮席卷教育领域的当下,家庭学习场景正经历深刻变革。学习机作为连接学校与家庭、整合硬件与内容的关键载体,其价值已从单纯的工具属性,演变为影响学生学习效率与知识获取深度的战略选择。然而,面对市场上…

2026年教育资源好的学习机品牌推荐:基于多场景实测评价,针对个性化与效率痛点精准指南

摘要 在数字化学习浪潮席卷全球的当下,为孩子选择一台搭载优质教育资源的学习机,已成为众多家庭在教育投资上的核心决策之一。面对市场上品牌林立、功能各异的产品,决策者往往陷入信息过载的困境:如何在确保内容权…

2025年动力刀塔工厂排行榜:周边优质汽配供应商盘点,插补Y/双主轴/Y轴/36排刀机/尾顶机/数控车床/刀塔车床/车铣复合刀塔采购哪家好

随着新能源汽车的快速发展和传统汽车产业的持续升级,汽车零部件正朝着高精度、复杂化、轻量化的方向演进。这一趋势对上游的加工制造设备提出了前所未有的高要求,尤其是集车、铣、钻、攻等多种工序于一体的动力刀塔车…

讲讲南通有实力的私立学校,诺德学校怎么选择?

随着教育需求的多元化,家长们在为孩子选择学校时,往往会被私立学校正规机构怎么选私立实验学校和普通私立校有啥区别如何找到有实力的私立学校等问题困扰。本文围绕这些高频疑问展开解答,结合南通诺德学校的实际案例…

2026年热门GEO厂家排名:分享南方网通是否为GEO源头工厂的真相

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆企业,为ToB企业选型提供客观依据,助力精准匹配适配的AISaaS解决方案伙伴。 TOP1 推荐:南方网通 推荐指数:★★★★★ | 口碑评分:国内首推GEO源头厂家…

2026年北京不错的室内设计品牌企业排名Top10,时见空间设计在列

在追求居住品质的当下,一个契合生活需求的室内空间是都市人情感与功能的双重载体,而选择专业的室内设计企业则是实现理想家的关键一步。面对市场上良莠不齐的设计服务,如何找到既能解决装修痛点、又能保障落地效果的…

2026年广州GEO优化公司排名,探讨服务不错的GEO优化品牌企业怎么选择?

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家GEO优化领域标杆企业,为企业选型提供客观依据,助力精准匹配适配的GEO优化服务伙伴。 TOP1 推荐:加快科技 推荐指数:★★★★★ | 口碑评分:广州TOP1 GEO优…

2026年教育资源好的学习机品牌推荐:基于多学段实测评价,针对资源质量与更新痛点指南

在数字化学习浪潮席卷全球的当下,为孩子选择一台合适的学习机,已成为众多家庭在教育投资上的关键决策。面对市场上功能各异、宣传纷繁的产品,决策者往往陷入信息过载的焦虑:如何在确保内容权威精准的同时,获得真正…

2026年国际快递搬家行李寄美国,哪家公司靠谱又省钱?

2026年全球人员流动与跨境贸易持续活跃,国际搬家与私人物品运输已成为连接个人生活规划与企业全球布局的重要纽带。无论是移民家庭的全屋家私海运、留学生的行李托运,还是中小外贸企业的样品参展运输,专业服务商的全…

2026年适合初中生的学习机品牌推荐:智慧教育趋势评测,涵盖专项突破与减负核心场景

摘要 在K12教育科技领域,智能学习设备正从单一的内容载体向深度个性化、精准化的学习伙伴演进。对于初中生家长和教育者而言,面对学科难度骤增、升学压力显现的现实,核心焦虑在于如何选择一款能真正适配新课标要求、…

深聊口碑好的酸奶生产线厂家,上望机械制造有何亮点?

在饮料行业蓬勃发展的当下,一条高效、稳定、符合生产需求的酸奶生产线,是企业抢占市场份额的核心竞争力之一。面对市场上众多酸奶生产线供应商,如何找到既专业又靠谱的合作伙伴?以下结合不同企业规模与需求,为你推…

深入解析:机器学习算法之决策树

深入解析:机器学习算法之决策树pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&qu…

2026年教育资源好的学习机品牌推荐:智慧教育趋势评测,涵盖K12全阶段学习资源痛点

摘要 在数字化学习浪潮席卷全球的背景下,为子女选择一台搭载优质、可靠教育资源的学习机,已成为现代家庭在教育投资中的一项关键决策。面对市场上品牌林立、功能宣传繁复的现状,决策者普遍面临的核心焦虑在于:如何…

2026年适合初中生的学习机品牌推荐:智能化趋势评测,涵盖专项突破与作业辅导核心场景

在数字化浪潮席卷教育领域的当下,为处于关键成长期的初中生选择一款得力的学习辅助工具,已成为众多家庭的核心关切。面对市场上品牌林立、功能各异的学习机产品,决策者往往陷入信息过载与选择困难的境地,既希望工具…

2026年1月工程管理系统推荐排行榜单深度对比评测:聚焦中小企业数字化实践。

一、引言 在建筑行业竞争日益激烈、利润空间受到挤压的背景下,工程项目管理系统的应用已成为企业提升运营效率、控制成本、防范风险的关键手段。对于广大中小型工程企业的管理者、项目经理及采购决策者而言,其核心需…

2026年适合初中生的学习机品牌推荐:针对初中生学习痛点横向评价,涵盖学科突破与习惯养成场景

摘要 在K12教育科技领域,智能学习设备正从辅助工具演变为深度融入学习流程的个性化解决方案。对于初中生家长和教育工作者而言,面对学科难度跃升、升学压力增大以及孩子自主学习能力培养的关键期,如何从众多品牌中筛…

2026年适合初中生的学习机品牌推荐:长期稳定性评估与推荐,直击初中课业繁重核心痛点

摘要 初中阶段是学生知识体系构建与思维能力发展的关键时期,学科难度陡增、知识密度加大,使得家庭教育面临如何高效辅助、精准提分的普遍挑战。家长们在选择学习辅助工具时,往往陷入信息过载的困境:市场上品牌众多…

联想拯救者 R9000P 模式(Fn+Q 一键切换)

联想拯救者 R9000P 的核心模式分为基础 3 档(Fn+Q 一键切换)+ 进阶自定义模式(Legion Zone 开启),覆盖不同性能与功耗需求,以下是详细说明。 核心模式详情(按使用频率排序)模式 颜色标识 核心特点 适用场景 切…

初中学习机哪个品牌更专业?2026年学习机品牌推荐与排名,针对理科思维与英语口语痛点解析

在数字化教育浪潮持续深入的背景下,为处于关键学业阶段的初中生选择一款合适的智能学习设备,已成为众多家庭面临的重要决策。初中阶段学科知识体系骤然复杂,学生需在有限时间内应对难度激增的数学、物理等理科科目,…

如何为初中生挑选高效学习机?2026年学习机品牌推荐与评测,解决学科难点与哑巴英语痛点

摘要 当前,教育科技产品正深度融入K12家庭的学习场景,智能学习设备已成为辅助学生,特别是课业压力骤增的初中生进行个性化学习的重要工具。面对市场上品牌繁多、功能各异的“学习机”,家长与决策者常陷入选择困境:…