vue3项目keepAlive使用方法详解

vue3.0(十四)内置组件KeepAlive 阅读详情


一、介绍


keepalive是Vue的内置组件,作用是将组件缓存在内存当中,防止重复渲染DOM,属于消耗内存获取速度。常用的用法是将组件或者路由缓存,现有的用法vue2.x与vue3.x有部分差别。以下主要将keepaliev在vue3.0中的用法。

二、使用
通常我们可以配置整个页面缓存或只让特定的某个组件保持缓存信息,配置了keepalive的路由或者组件,只会在页面初始化的时候执行created->mounted生命周期,第二次及以后再进入该页面将不会执行改生命周期,而是会去读取缓存信息。

1、router配置缓存
1)第一步:配置App.vue
vue2.x与vue3.0的App.vue配置有差异,在App.vue配置信息如下:
vue2.x中,router-view可整个放入keepalive中,如下:

<template>
    <!-- vue2.x配置 -->
   <keep-alive>
    <router-view v-if="$route.meta.keepAlive" />
  </keep-alive>
  <router-view v-if="!$route.meta.keepAlive"/>
</template>



vue3.0的App.vue配置方法如下:

<template>
  <!-- vue3.0配置 -->
  <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> 
</template>


这里component是vue中的特殊组件,:is是用来绑定指定组件,这里是与路由对应的页面绑定。

2)第二步:添加meta属性
在对应的路由上添加meta属性来设置页面是否要使用缓存,如下:

{
  path: "/keepAliveTest",
   name: "keepAliveTest",
   meta: {
       keepAlive: true //设置页面是否需要使用缓存
   },
   component: () => import("@/views/keepAliveTest/index.vue")
 },



到此即可实现页面的简单缓存,但是有些场景需要做复杂处理,比如说页面部分信息不需要读缓存,每次进入都需要进行处理,这个时候我们就可以使用activated生命周期来解决页面部分刷新问题。

3)实现页面部分刷新
先了解vue的生命周期,被keepAlive包裹的组件和页面,页面进入时执行的生命周期为:created->mounted->activated;
其中created->mounted是页面第一次进入才会执行,activated生命周期在页面每次进入都会执行,特属于keepAlive的一个生命周期,所以我们把页面每次进来要进行的操作放入该生命周期即可。
如下代码:

activated() {
    // 页面每次进入将手机动态验证码置为空
   this.$refs.mobPwdCode.inputValue = '';
},


实现的功能是用户每次进入将动态验证码设为空,实现此功能也可以用其他方式,比如说将该组件放缓存外(参见2、component配置缓存)。

4)动态设置路由keepAlive属性
有些时候我们用完了keepalive缓存之后,想让页面不再保持缓存,或者设置下一个页面keepalive,也这个时候我们可以改变meta的keepAlive值来去除页面缓存,使用beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave,使用方式如下:

// to为即将跳转的路由,from为上一个页面路由

beforeRouteLeave(to, from,+ next) {
    // 设置下一个路由的 meta
    to.meta.keepAlive = false;
    next();
}



2、组件配置缓存
1)使用场景
通常我们会对vue的一个页面进行缓存,然而有些时候我们仅需要缓存页面的某一个组件,或是在使用动态组件compnent进行组件切换时需要对组件进行缓存。

2)缓存页面指定组件
当用于App.vue时,所有的路由对应的页面为项目所对应的组件,使用方法如下:
在keep-alive组件上使用include或exclude属性,如下:使用include
代表将缓存name为testKA的组件,

// APP.vue文件,将页面作为组件缓存

<router-view v-slot="{ Component }">
  <keep-alive include="testKA">
    <component :is="Component"/>
  </keep-alive>
</router-view>


在router对应的页面中,需要设置name属性,如下:

export default {
    name:'testKA',// keep-alive中include属性匹配组件name
    data() {return {}},
    activated() {
        // keepalive缓存的页面每次进入都会进行的生命周期
    },
}



此外,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>



exclude用法与include用法相同,代表不被缓存的组件。此外,keep-alive还有一个max属性,代表缓存组件最大数量,一旦这个数字达到了,在新实例被创建之前,已缓存组件中最久没有被访问的实例会被销毁掉。

<keep-alive :max="10">
  <component :is="view"></component>
</keep-alive>



当用于某个页面进行组件切换时,用法与缓存路由相同,不过只是将页面降级为一个组件,父组件由App.vue降级为对应路由页面。

3)总结
在实战过程中,发现keepalive缓存组件时,不能跨级使用;,比如在App.vue中使用include属性进行name="a"匹配时,只能匹配缓存name为a的子组件(路由页面),而不能缓存name为"a"的孙子组件(子页面引的组件)。若想缓存孙子组件,可以将整个子组件缓存,或者在子组件里再使用keepalive。关于keepalive使用说明文档,可去官网学习:https://v3.vuejs.org/guide/component-dynamic-async.html#dynamic-components-with-keep-alive
————————————————
版权声明:本文为优快云博主「Saga Two」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/m0_46309087/article/details/109403655

Vue项目keepAlive失效?检查这3个常见坑(附解决方案) 本文深入剖析了Vue项目中keepAlive缓存失效的三个常见原因及解决方案。首先,必须明确区分路由配置的name与组件定义的name,后者是keepAlive匹配的关键。其次,App.vue中基于meta.keepAlive的条件渲染逻辑需避免销毁keep-alive实例,推荐使用v-show或动态include方案。最后,需确保keep-alive正确包裹组件层级,并合理使用activated与deactivated生命周期钩子。 阅读详情

相关推荐

vue3 迫不得已我硬着头皮查看了keepalive的源代码,解决了线上的问题

🚀 优质资源分享 🚀 学习路线指引(点击解锁) 知识定位 人群定位 🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 1、通过本文可以了解到vue3 keepalive功能 2、通过本文可以了解到vue3 keepalive使用场景 3、通过本文可以学习到vue3 keepalive

www_xuhss_com的博客 3090

vue 使用 keep-alive

vue3 使用 keep-alive 踩坑踩了半天!!! 我这里的小 DEMO 是,首先打开主页是新闻的界面 然后我点击跳转到消息界面 之后我想要做的效果,是跳转到其他的页面之后,我再次回到首页,那么他的页面还是保持在消息的界面 这里注意,是要给哪个页面进行缓存就给哪个页面添加 keepAlive:true !!!第二步!!!,在 App.vue 界面中添加 keep-alive,注意下面这种写法是 vue3 的新写法,之前都是 keep-alive将 router-view 包裹住的 !!!第三步!!

qq_45770253的博客 1万+

【Vue3第二十二章】KeepAlive缓存组件

使用keep-alive的好处就是,在组件切换过程中将状态保留在内存中,防止重复渲染DOM,减少加载时间及性能消耗,提高用户体验性。

前端知识分享喵 6886

Vue3 keep-alive

Vue3中的keep-alive可以用于优化组件渲染的性能。例如,在一个页面中,有一些组件不需要每次访问时都重新渲染,可以使用keep-alive将这些组件缓存起来,只在第一次或数据变化时渲染更新。这样做可以减少组件的重复渲染,提高页面的响应速度。同时,keep-alive也可以用于处理一些需要缓存的数据,例如用户登录状态等。   本文主要介绍Vue3中keep-alive的使用。

qq_45438471的博客 9546

Vue3-43-组件- 组件状态保持 KeepAlive 的简单使用

vue3 中 使用 KeepAlive 缓存组件状态

northcastle的博客 1782

电机系列(1) - foc最基本原理、clark变换 、park变换、附代码

什么是FOC? FOC(Field-Oriented Control),直译是磁场定向控制,也被称作矢量控制 (VC,Vector Control) ,是目前无刷直流电机(BLDC)和永磁同步电机(PMSM)高效控制的最优方法之一。FOC旨在通过精确地控制磁场大小与方向,使得电机的运动转矩平稳、噪声小、效率高,并且具有高速的动态响应。 简单来说就是,FOC是一种对无刷电机的驱动控制方法,它可以让我们对无刷电机进行 “像素级” 控制,实现很多传统电机控制方法所无法达到的效果。 因为所谓的“矢量控制”其实就是

nepqiu的博客 7万+

vue2和vue3项目keepAlive

一、介绍 keepalive是Vue的内置组件,作用是将组件缓存在内存当中,防止重复渲染DOM,属于消耗内存获取速度。常用的用法是将组件或者路由缓存,现有的用法vue2.x与vue3.x有部分差别。以下主要将keepaliev在vue3.0中的用法。 二、使用 通常我们可以配置整个页面缓存或只让特定的某个组件保持缓存信息,配置了keepalive的路由或者组件,只会在页面初始化的时候执行created->mounted生命周期,第二次及以后再进入该页面将不会执行改生命周期,而是会去读取缓存信息。 1、

qq_37140828的博客 721

GEM5教程--gem5开始之旅(一)

GEM5系列教程--gem5开始之旅一、建立GEM5 GEM5模拟器是一个用于计算机系统结构研究的模块化平台,包含系统级别的结构以及处理器的微体系结构。读者若想详细的了解,请查看其官方文档GEM5文档 读者如果想要入门GEM5的话,可以参考Learning_GEM5这个网站,这里面有较为详细的教程,可以带读者从入门到精通。小编我对GEM5的入门学习也是从这个Learning_GEM5这个网站学习的...

qq_43381135的博客 3万+

vue3项目如何使用keepAlive?如何实现回退到这个页面时不刷新,跳转至这个页面时会刷新?

只有第一次进入项目时,页面B加载一次,之后无论跳转还是切换都不刷新页面B了!页面A为首页面、页面B为设置了keepAlive的页面、页面C为新页面。页面B设置keepAlive,保证这个页面不刷新。实现回退B不刷新B,跳转至B页面会刷新B

weixin_69924839的博客 1021

避坑指南:Livox Mid-360双雷达SLAM配置中,那些官方文档没说的细节(IP设置、话题分离与时间同步)

本文详细解析了Livox Mid-360双雷达SLAM配置中的关键优化点,包括IP设置、话题分离与时间同步等官方文档未提及的细节。通过实战案例和代码示例,帮助开发者解决点云错位、IMU数据混乱等问题,提升SLAM系统的稳定性和精度。特别针对网络架构设计、驱动修改和时间同步机制提供了专业指导。

weixin_29745609的博客 425

别再为数码管引脚发愁了!用STM32的普通IO口驱动TM1650数码管模块(附完整模拟I2C代码)

本文详细介绍了如何利用STM32的普通IO口通过模拟I2C协议驱动TM1650数码管模块,提供了完整的硬件连接方案和软件实现代码。通过模拟I2C技术,开发者可以灵活使用任意GPIO引脚控制多位数码管显示,解决了传统驱动方式占用大量IO资源的问题。文章包含TM1650寄存器解析、亮度控制等实用功能实现,并分享了常见问题排查与性能优化技巧。

weixin_30764771的博客 657

airi 项目 Vue 3 KeepAlive 组件最佳实践:缓存管理、生命周期与失效策略全指南

`<KeepAlive>` 是 Vue 3 中用于保留组件实例状态的内置组件:它缓存组件实例而不是销毁它们,让视图在切换后依然保持滚动位置、表单输入、聊天记录等状态。本指南以 airi 项目(自托管 AI 伴侣与赛博生命灵魂容器,前端基于 Vue 3 构建)中沉淀的 KeepAlive 最佳实践为蓝本,系统讲解它的适用场景、缓存上限控制、`include`/`exclude` 匹配、失效策略、生命

gitblog_00758的博客 685

泰森多面体Voronoi 3D-V5.0 功能介绍

Abaqus Voronoi3D

qq_34840441的博客 3364

vue3项目 keepAlive 导致的切换tab页问题

今天开发项目过程中发现,打开多个tab详情页后,详情页之间互相切换,数据没有刷新。查看控制台,发现详情页tab之间互相切换时,onActivated钩子函数只运行了一次,后续也并没有发送相应的请求。猜想:可能是keepAlive将详情页(同一个组件,路由带的query不同)都视作同一个组件了,所以在详情页之间切换,组件一直都是出于激活状态,只在第一次会调用onActivated钩子函数。此时,我发现,在其他页面和详情页互相切换时,onActivated钩子函数被成功调用了。果然,默认的组件名作为区分。

jiangchenW的博客 723

使用 C# 开发海康设备实时视频流的监控与报警系统

本文介绍了如何使用C#结合海康威视SDK(HCNetSDK)开发安防监控系统,涵盖设备登录、视频流获取、报警处理和云台控制等核心功能。内容包括开发环境配置、系统架构设计、关键代码实现(如设备登录、实时视频播放、报警设置)以及用户界面设计。通过Windows Forms/WPF,开发者可构建完整的监控应用,实现设备管理、视频监控、报警响应等功能。系统采用模块化设计,便于扩展和维护,适用于各类安防场景。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1355

JeecgBoot漏洞利用工具解析:一键getshell原理与安全加固实践

在应用安全领域,远程代码执行(RCE)和文件上传漏洞是Web系统面临的高危威胁,其核心原理在于对用户输入的控制不足或安全校验缺失。攻击者通过构造恶意请求,可绕过系统边界,在服务器上执行任意命令或上传恶意文件,从而获取系统控制权。这类漏洞的技术价值在于揭示了应用层安全防护的薄弱环节,其利用方式自动化、集成化趋势明显,极大地提升了攻击效率。在低代码开发平台等快速构建的业务系统中,此类风险尤为突出。应用场景广泛覆盖安全测试、渗透评估与应急响应。本文聚焦于JeecgBoot平台的历史高危漏洞,深入解析其SQL注入、

weixin_30787531的博客 551

vue3+vite使用记录

vue3+vite使用记录

IT菜鸟 864

百万 Token 压力实测:1M Context 的真实能力边界在哪里?

本文揭示了长上下文模型的性能衰减规律:1M上下文存在"容量曲线"与"质量曲线"的分歧,512K是可靠拐点。通过MRCR测试发现,不同任务类型衰减差异显著——检索任务在512K后性能下降30.6%,而生成任务仅下降5%。研究提出三阶段补偿策略:三明治注入(首尾指令强化)、语义面包屑(位置标记)、引用检查(强制溯源),可将512K-1M区间的可用性提升20%。工程实践表明,中段区域(30-70%位置)是注意力薄弱区,需要特殊处理。最终建议:关键检索任务控制在512K内,关联推理任务可扩展至

liuzhupeng的专栏 337

简单解决iframe无法被keepalive缓存,导致切换页面时会不停的重新加载iframe页面

接手别人的项目,然后遇到了一个问题,公司的后台项目之前有一个版本是用php写的,有几百个菜单页面,然后重构成新的版本页面需要时间,但是新老版本又需要交替使用,所以新项目里面的老项目页面是通过iframe加载的 但是呢遇到一个问题就是每次切换tab和左边菜单的时候,iframe都会重新加载,哪怕写了keepalive也没用,页面不会被缓存,后面读了一下router,也大概知道keepalive的原理,原理也不复杂,简单点说就是,iframe加载的页面属于是网络资源,keepalive并不会缓存iframe的

weixin_72436508的博客 3200

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【亲测免费】 Vue3+Vite+TypeScript+Ant Design Vue+Pinia后台管理系统项目

Vue3+Vite+TypeScript+Ant Design Vue+Pinia后台管理系统项目 去发现同类优质开源项目:https://gitcode.com/ 项目简介 本仓库提供了一个基于Vue3、Vite、TypeScript、Ant Design Vue和Pinia等主流技术的后台管理系统项目。该项目不仅支持keepalive功能,还集成了Vite自动生成路由的功能,极大地简化了开发流...

gitblog_09810的博客 710

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

vue-page-stack vs KeepAlive:终极对比!谁才是Vue3页面缓存最佳方案?

在Vue3单页应用开发中,页面状态的管理一直是开发者面临的重要挑战。**vue-page-stack**作为一款专为Vue3设计的导航管理器,与Vue内置的**KeepAlive**组件都致力于解决页面缓存问题,但它们的实现方式和适用场景却有显著差异。本文将从核心原理、功能特性、性能表现和适用场景四个维度,为你揭示这两种方案的优缺点,助你快速选择最适合项目需求的页面缓存方案。 ## 一、核心原理

gitblog_00785的博客 908

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

vue3使用keeplive实现多页面缓存(1)

vue3使用keeplive实现多页面缓存

chencaw的专栏 1582

vue3 给缓存组件

vue 缓存组件

weixin_43136717的博客 765

Vue3生命周期在电商项目中的5个关键应用场景

获取数据后,我们会更新组件的响应式状态,触发视图的重新渲染。比如在onMounted中采用懒加载技术,在onBeforeUpdate中避免不必要的渲染,都能让页面更加流畅。我们利用onBeforeUpdate钩子比较新旧数据的差异,如果发现价格或库存有变动,就在页面上给出提示。通过合理运用这些钩子函数,我们能够更好地控制组件行为,优化性能,提升用户体验。我在上面测试这些生命周期钩子时,发现调试和预览都非常方便,省去了配置环境的麻烦。通过这些实践,我们不仅实现了功能需求,还确保了代码的可维护性和性能。

EmeraldWolf23的博客 321
上一篇: CSS 适配苹果机型
下一篇: SpringBoot 实现动态定时任务
Trank-Lw
博客等级 码龄9年 103粉丝 96原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值