keep-alive的使用
Vue中的<keep-alive>
组件是前端开发中的一个宝藏功能,它如同时光胶囊般保留组件的状态,让组件在切换时仿佛按下暂停键,再次回来时还能继续播放,极大地优化了用户体验和性能。🚀✨
作用
-
状态保留:当包裹在
<keep-alive>
中的组件被切换出去时,它的状态不会被销毁,而是被缓存起来。这意味着组件的data和计算属性等状态信息会被保存在内存中,下次再访问该组件时,可以直接复用这些缓存状态,而不需要重新初始化和渲染DOM树,提高了页面切换的效率。📚💨 -
生命周期钩子:使用
<keep-alive>
后,被缓存的组件会有特定的生命周期钩子函数执行,比如activated
会在组件被重新激活时调用,而deactivated
则在组件被缓存时调用,这让开发者有机会在组件切换时执行特定的操作,比如恢复或暂停定时器等。🔧👀
具体用法
基本用法
直接将<keep-alive>
作为包裹组件,内部放置可以被缓存的组件:
<keep-alive><component :is="currentComponent"></component>
</keep-alive>
在这个例子中,currentComponent
是一个动态绑定的变量,根据它的值变化,内部的组件会切换,但因为有了<keep-alive>
,之前显示过的组件状态会被保留。
配置缓存策略
Vue允许你为不同的组件指定不同的缓存策略,通过:include
、:exclude
或:max
属性:
-
:include
- 只缓存指定名称的组件列表。
<keep-alive include="ComponentA,ComponentB"><component :is="currentComponent"></component>
</keep-alive>
:exclude
- 除了指定名称的组件外,其他都缓存。
<keep-alive exclude="ComponentC"><component :is="currentComponent"></component>
</keep-alive>
:max
- 最大缓存数量限制,当达到最大数量时,最早进入缓存的组件将被移除以腾出空间。
<keep-alive :max="3"><component :is="currentComponent"></component>
</keep-alive>
使用生命周期钩子
在组件内部,可以利用activated
和deactivated
钩子来处理组件的激活与停用逻辑:
export default {name: 'MyComponent',activated() {console.log('组件被激活了,可以在这里恢复数据或执行其他操作');✨},deactivated() {console.log('组件即将被缓存,可以在这里清理资源或暂停某些操作');💤}
}
- 注意,
<keep-alive>
并不会阻止组件的销毁和重建,只是在一定程度上复用了已创建的实例。因此,对于数据量特别大或者包含大量复杂计算的组件,使用时要权衡是否真的需要缓存。 - 当使用路由时,Vue Router默认已经对路由视图进行了
<keep-alive>
处理,你可以通过路由元信息自定义每个路由的缓存策略。
为了更好地理解<keep-alive>
的使用,让我们通过一个简单的Vue应用示例来演示其具体应用。在这个例子中,我们将创建一个简单的Tab切换组件,其中包含两个可切换的子组件,使用<keep-alive>
来缓存这两个组件的状态。
项目结构
首先,假设你的Vue项目已经设置好,下面是涉及到的两个组件文件:
Tab1.vue
- 第一个可缓存的组件Tab2.vue
- 第二个可缓存的组件App.vue
- 应用的主组件,包含<keep-alive>
和切换逻辑
Tab1.vue
<template><div><h2>我是Tab 1组件</h2><p>输入一些文本:<input v-model="message" /></p><p>你输入的是:{{ message }}</p></div>
</template><script>
export default {data() {return {message: ''};},activated() {console.log('Tab1被激活了');},deactivated() {console.log('Tab1被缓存了');}
};
</script>
Tab2.vue
内容与Tab1.vue
相似,只是显示信息不同,用于展示另一个组件的内容。
<template><div><h2>我是Tab 2组件</h2><p>这里是Tab 2的内容...</p></div>
</template><script>
export default {activated() {console.log('Tab2被激活了');},deactivated() {console.log('Tab2被缓存了');}
};
</script>
App.vue
主组件,使用v-if
和v-else
控制显示哪个组件,并使用<keep-alive>
包裹以实现状态缓存。
<template><div id="app"><button @click="switchTab('Tab1')">切换到Tab 1</button><button @click="switchTab('Tab2')">切换到Tab 2</button><keep-alive><component :is="currentTab"></component></keep-alive></div>
</template><script>
import Tab1 from './components/Tab1.vue';
import Tab2 from './components/Tab2.vue';export default {components: {Tab1,Tab2},data() {return {currentTab: 'Tab1'};},methods: {switchTab(tabName) {this.currentTab = tabName;}}
};
</script>
在这个例子中,当你在Tab1
中输入一些文本然后切换到Tab2
,再回到Tab1
时,之前输入的文本仍然存在,这是因为<keep-alive>
保留了Tab1
组件的状态。同时,通过浏览器的控制台,你还可以看到activated
和deactivated
钩子函数的调用日志,进一步验证了组件的激活与缓存过程。🎯🔍
相关文章:
keep-alive的使用
Vue中的<keep-alive>组件是前端开发中的一个宝藏功能,它如同时光胶囊般保留组件的状态,让组件在切换时仿佛按下暂停键,再次回来时还能继续播放,极大地优化了用户体验和性能。🚀✨ 作用 状态保留:当包…...

【Linux】中的常见的重要指令(中)
目录 一、man指令 二、cp指令 三、cat指令 四、mv指令 五、more指令 六、less指令 七、head指令 八、tail指令 一、man指令 Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是 man 语法: m…...

营收净利双降、股东减持,大降价也救不了良品铺子
号称“高端零食第一股”的良品铺子(603719.SH),正遭遇部分股东的“用脚投票”。 5月17日晚间,良品铺子连发两份减持公告,其控股股东宁波汉意创业投资合伙企业、持股5%以上股东达永有限公司,两者均计划减持。 其中,宁…...
【设计模式】设计模式的分类
通常设计模式的分类有创建型、行为型和结构型。 创建型 常用的有:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式。 不常用的有:原型模式。 创建型模式涉及到将对象实例化,这类模式都提供一个方法,将…...
TCP/UDP的连接机制
TCP/UDP的连接机制 TCP的连接机制 TCP(Transmission Control Protocol)是一种面向连接的协议,提供可靠的、按顺序的数据传输服务。TCP的连接机制包括连接建立、数据传输和连接终止。 1. 连接建立(三次握手) TCP通过…...
供应链金融模式学习资料
目录 产生背景 供应链金融的诞生 供应链金额的六大特征...
代码随想录-算法训练营day50【动态规划12:最佳买卖股票时机含冷冻期、买卖股票的最佳时机含手续费、股票问题总结】
代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part12● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费 ●总结309.最佳买卖股票时机含冷冻期 本题加了一个冷冻期,状态就多了,有点难度,大家要把各个状态分清,思路才能清晰…...

Dilworth 定理
这是一个关于偏序集的定理,事实上它也可以扩展到图论,dp等中,是一个很有意思的东西 偏序集 偏序集是由集合 S S S以及其上的一个偏序关系 R R R定义的,记为 ( S , R ) (S,R) (S,R) 偏序关系: 对于一个二元关系 R ⊂…...

BUUCTF---web---[BJDCTF2020]ZJCTF,不过如此
1、点开连接,页面出现了提示 传入一个参数text,里面的内容要包括I have a dream。 构造:?/textI have a dream。发现页面没有显示。这里推测可能得使用伪协议 在文件包含那一行,我们看到了next.php的提示,我们尝试读取…...

力扣刷题---2206. 将数组划分成相等数对【简单】
题目描述🍗 给你一个整数数组 nums ,它包含 2 * n 个整数。 你需要将 nums 划分成 n 个数对,满足: 每个元素 只属于一个 数对。 同一数对中的元素 相等 。 如果可以将 nums 划分成 n 个数对,请你返回 true …...

2461. 长度为 K 子数组中的最大和(c++)
给你一个整数数组 nums 和一个整数 k 。请你从 nums 中满足下述条件的全部子数组中找出最大子数组和: 子数组的长度是 k,且子数组中的所有元素 各不相同 。 返回满足题面要求的最大子数组和。如果不存在子数组满足这些条件,返回 0 。 子数…...
range for
1. 基于范围的for循环语法 C11标准引入了基于范围的for循环特性,该特性隐藏了迭代器 的初始化和更新过程,让程序员只需要关心遍历对象本身,其语法也 比传统for循环简洁很多: for ( range_declaration : range_expression ) {loo…...

leetcode230 二叉搜索树中第K小的元素
题目 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 示例 输入:root [5,3,6,2,4,null,null,1], k 3 输出:3 解析 这道题应该是能做出…...
.Net Core学习笔记 框架特性(注入、配置)
注:直接学习的.Net Core 6,此版本有没有startup.cs相关的内容 项目Program.cs文件中 是定义项目加载 启动的地方 //通过builder对项目进行配置、服务的加载 var builder WebApplication.CreateBuilder(args); builder.Services.AddControllers();//将…...

利用AI技术做电商网赚,这些百万级赛道流量,你还不知道?!
大家好,我是向阳 AI技术的飞速扩展已经势不可挡,不管你承不承认,AI 已经毫无争议的在互联网中占有一席之地了 无论你是做内容产业的,还是做电商的,你现在都躲不开 AI。 现在互联网行业的竞争就是这么残酷 互联网行业…...
leetcode-560 和为k的数组
一、题目描述 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 注意:nums中的元素可为负数 输入:nums [1,1,1], k 2 输出:2输入:num…...
Spring Boot实战指南:从入门到企业级应用构建
目录 一、引言 二、快速入门 1. 使用Spring Initializr创建项目 三、Spring Boot基础概念与自动配置 1. 理解SpringBootApplication注解 2. 自动配置原理 3. 查看自动配置报告 四、Spring Boot核心特性及实战 1. 外部化配置 2. Actuator端点 3. 集成第三方库 五、Sp…...

OneAPI接入本地大模型+FastGPT调用本地大模型
将Ollama下载的本地大模型配置到OneAPI中,并通过FastGPT调用本地大模型完成对话。 OneAPI配置 新建令牌 新建渠道 FastGPT配置 配置docker-compose 配置令牌和OneAPI部署地址 配置config.json 配置调用的渠道名称和大模型名称 {"systemEnv": {&qu…...

Training-Free Consistent Text-to-Image Generation # 论文阅读
URL https://arxiv.org/pdf/2402.03286 TL;DR 2024 年 2 月 nvidia 的文章。提出了一种不需要任何额外训练的主体保持方法,可以一次生成的 batch 中,通过多个 prompt 生成对应的多张图片,这些图片都可以拥有一个主体。 本文提出的方法通过…...
Spring 中常用的手动装载 bean 方法
在 Spring 的 bean 装载条件中,虽然 Spring 给我们提供了非常好用便捷的 Condition 相关注解,但是很多时候 Condition 相关注解并不满足我们的需求,我需要更复杂的条件手动控制是否装置 bean。这个时候我们就可以实现 Spring 为我们提供的几个…...
Next.js+prisma开发一
1.初始化Next.js项目 #按版本安装 npx create-next-app13.4.5 如果最新版本 执行:npx create-next-applatest2. 安装Prima和客户端 npm install prisma --save-dev npm install prisma/client3.初始化Prisma,以SQLit举例 # 初始化 Prisma 并配置 SQLi…...
DrissionPage调试工具:网页自动化与数据采集的革新利器
在网页自动化测试与数据采集领域,开发者长期面临两难选择:使用Selenium等工具操作浏览器时效率不足,而直接调用Requests库又难以应对复杂动态页面。DrissionPage的出现完美解决了这一矛盾,这款基于Python开发的工具创新性地将浏览…...
微服务常用日志追踪方案:Sleuth + Zipkin + ELK
在微服务架构中,一个用户请求往往需要经过多个服务的协同处理。为了有效追踪请求的完整调用链路,需要一套完整的日志追踪方案。Sleuth Zipkin ELK 组合提供了完整的解决方案 Sleuth:生成和传播追踪IDZipkin:收集、存储和可视化…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信拓扑与操作 BR/EDR(经典蓝牙)和 BLE
目录 1. BR/EDR(经典蓝牙)网络结构微微网(Piconet)散射网(Scatternet)蓝牙 BR/EDR 拓扑结构示意图 2. BLE(低功耗蓝牙)网络结构广播器与观察者(Broadcaster and Observer…...

[蓝桥杯]耐摔指数
耐摔指数 题目描述 X 星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。 各大厂商也就纷纷推出各种耐摔型手机。X 星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通。…...

适用于vue3的大屏数据展示组件库DataV(踩坑版)
踩坑版 如果按照官网(https://datav-vue3.jiaminghi.com/)的vue3安装有问题 官网是将dataview/datav-vue3 安装为本地依赖 npm install dataview/datav-vue31、跑起来报错(报错信息忘记保留了) 有人说找到node_modules, 安装成功后会有这个…...

鸿蒙UI(ArkUI-方舟UI框架)- 使用弹框
返回主章节 → 鸿蒙UI(ArkUI-方舟UI框架) 文章目录 弹框概述使用弹出框(Dialog)弹出框概述不依赖UI组件的全局自定义弹出框(openCustomDialog)(推荐)生命周期自定义弹出框的打开与关闭更新自定义弹出框内容更新自定义弹出框的属性完整示例 基础自定义弹…...

在不同型号的手机或平板上后台运行Aidlux
在不同型号的手机或平板上后台运行Aidlux 一、鸿蒙/HarmonyOS手机与平板 二、小米手机与平板 三、OPPO手机与平板 四、vivo手机与平板 一、鸿蒙/HarmonyOS手机与平板 (系统版本有差异,但操作原理相通) 第一步:点击设置——应用和…...

CSS 3D 变换中z-index失效问题
CSS 3D 变换中 z-index 失效问题 1. z-index 失效了 在 CSS 中,z-index 通常用于控制元素的层叠顺序,数值越大,元素越靠前显示。在 3D 变换(如 rotateX、translateZ) 中使用 z-index 时,可能会发现z-inde…...
Vue3 中使用 i18n
Vue3 中使用i18n 在 Vue 3 中使用国际化(i18n)可以通过官方的 vue-i18n 库来实现。vue-i18n 是专门为 Vue 应用设计的国际化解决方案,支持多语言切换、动态内容插值等功能。 以下是如何在 Vue 3 中使用 vue-i18n 的详细步骤: 1.…...