掌握Vue 3生命周期:从组合式API到高效代码实践
引言
在 Vue 3 中,生命周期的概念得到了进一步的优化和简化。Vue 3 引入了组合式 API(Composition API),这为开发者提供了更灵活的方式来组织和重用代码逻辑。与传统的选项式 API(Options API)相比,组合式 API 使得生命周期钩子的使用更加直观和方便。
Vue 3 生命周期概述
Vue 3 引入了新的生命周期钩子和改进了现有的生命周期管理方式,以适应组合式 API 的引入。生命周期钩子是 Vue 组件中用于控制组件在不同阶段执行特定逻辑的函数。了解这些钩子对于构建高效和可维护的 Vue 应用程序至关重要。
Vue 3 中的生命周期钩子
在 Vue 3 中,生命周期钩子被分为两个主要类别:组合式 API 钩子和选项式 API 钩子。组合式 API 提供了一种更灵活的方式来组织和重用代码逻辑,而选项式 API 则保持了 Vue 2 的风格,适合那些熟悉旧版本的开发者。
组合式 API(Composition API)与生命周期钩子的关系
组合式 API 通过引入 setup() 函数,为开发者提供了一种新的方式来编写组件逻辑。在 setup() 函数中,你可以使用一系列的响应式函数和生命周期钩子,这些钩子与传统的选项式 API 中的钩子在功能上是等价的,但使用方式有所不同。
在组合式 API 中,生命周期钩子被定义为独立的函数,而不是作为组件选项。这意味着你可以根据需要导入和使用这些钩子,而不是依赖于组件的选项对象。这种灵活性使得代码更加模块化和可重用。
例如,onMounted() 钩子在组件挂载到 DOM 后被调用,无论是在 setup() 函数中直接使用,还是在其他组合式 API 函数中导入使用,其功能都是相同的,而且可以重复使用。这为开发者提供了更大的灵活性,允许他们在不同的上下文中重用生命周期逻辑。
Vue 3 生命周期钩子详解
setup()
- 作用和时机:
setup()是 Vue 3 组件的入口点,它在组件创建之前被调用,此时组件实例尚未创建。这是组合式 API 的核心,允许你在组件实例化之前执行逻辑,如定义响应式状态、方法和生命周期钩子。 - setup() 中的生命周期钩子:在
setup()函数中,你可以直接使用生命周期钩子,如onMounted()、onUnmounted()等,这些钩子在组件的相应生命周期阶段被调用。
onBeforeMount()
- 作用:
onBeforeMount()钩子在组件即将挂载到 DOM 之前被调用。这是在组件的模板或渲染函数被编译成虚拟 DOM 之后,但在实际 DOM 被创建和插入到页面之前。 - 何时调用:在
setup()函数之后,组件的模板或渲染函数被编译后,但在 DOM 更新之前。
onMounted()
- 作用:
onMounted()钩子在组件挂载到 DOM 后被调用。这是在组件的模板或渲染函数被编译成虚拟 DOM,并且实际 DOM 被创建和插入到页面之后。 - 何时调用:在
onBeforeMount()钩子之后,组件的 DOM 已经被创建并插入到页面。
onBeforeUpdate()
- 作用:
onBeforeUpdate()钩子在组件即将更新其 DOM 之前被调用。这是在响应式状态变化后,但在实际 DOM 更新之前。 - 何时调用:在组件的响应式状态变化后,但在 DOM 更新之前。
onUpdated()
- 作用:
onUpdated()钩子在组件更新其 DOM 后被调用。这是在响应式状态变化后,DOM 已经被更新。 - 何时调用:在
onBeforeUpdate()钩子之后,组件的 DOM 已经被更新。
onBeforeUnmount()
- 作用:
onBeforeUnmount()钩子在组件即将卸载和销毁之前被调用。这是在组件的 DOM 被移除之前,但在组件实例销毁之前。 - 何时调用:在组件的 DOM 即将被移除之前。
onUnmounted()
- 作用:
onUnmounted()钩子在组件卸载和销毁后被调用。这是在组件的 DOM 已经被移除,组件实例已经销毁。 - 何时调用:在
onBeforeUnmount()钩子之后,组件的 DOM 已经被移除,组件实例已经销毁。
onErrorCaptured()
- 作用:
onErrorCaptured()钩子在捕获一个来自子孙组件的错误时被调用。这是在错误被抛出后,但在它被全局错误处理器处理之前。 - 何时调用:在子孙组件发生错误时。
onRenderTracked()
- 作用:
onRenderTracked()钩子在渲染过程中追踪到一个依赖时被调用。这是在组件的响应式依赖被追踪时,通常用于调试。 - 何时调用:在组件的响应式依赖被追踪时。
onRenderTriggered()
- 作用:
onRenderTriggered()钩子在渲染过程中触发一个依赖时被调用。这是在组件的响应式依赖被触发时,通常用于调试。 - 何时调用:在组件的响应式依赖被触发时。
这些生命周期钩子为开发者提供了在组件生命周期的特定时刻执行代码的能力,从而允许更精细地控制组件的行为和性能。在实际开发中,合理地使用这些钩子可以提高应用的响应性和效率。
选项式和组合式
选项式 API(Options API)示例
在选项式 API 中,生命周期钩子是作为组件对象的属性定义的。
export default {data() {return {message: 'Hello Vue 3!'};},created() {console.log('组件创建完成', this.message);},mounted() {console.log('组件挂载完成', this.message);},beforeDestroy() {console.log('组件即将销毁', this.message);}
};
在上面的示例中,created、mounted 和 beforeDestroy 是生命周期钩子,它们分别在组件创建、挂载和销毁之前被调用。
组合式 API(Composition API)示例
在组合式 API 中,生命周期钩子是作为独立的函数导入并使用的。
import { ref, onMounted, onBeforeUnmount } from 'vue';export default {setup() {const message = ref('Hello Vue 3!');onMounted(() => {console.log('组件挂载完成', message.value);});onBeforeUnmount(() => {console.log('组件即将销毁', message.value);});return {message};}
};
在上面的示例中,onMounted 和 onBeforeUnmount 是生命周期钩子,它们分别在组件挂载和即将销毁之前被调用。ref 用于创建响应式数据。
选项式 API 与组合式 API 的主要区别
- 代码组织:选项式 API 通过将逻辑组织在不同的选项(如
data,methods,created,mounted等)中,而组合式 API 通过setup函数将逻辑组织在一起,使得代码更加模块化和可重用。 - 灵活性:组合式 API 允许开发者在
setup函数中自由地使用响应式 API 和生命周期钩子,而选项式 API 的逻辑组织方式较为固定。 - 可读性:对于熟悉 Vue 2 的开发者来说,选项式 API 可能更直观易懂,而组合式 API 需要一定的学习曲线,但一旦掌握,可以编写出更加清晰和可维护的代码。
在实际开发中,你可以根据项目需求和个人偏好选择使用选项式 API 或组合式 API。Vue 3 提供了这两种 API,以适应不同场景和开发者的习惯。在组合式API中,我们可以把相关联的模块放到一个setup()里,整个script由多个setup()组成,个人认为组合式的出现是增加了代码的可维护性,减少了‘鼠标滚轮抡到冒烟’这种情况。
总结
Vue 3 的生命周期钩子是构建高效和可维护 Vue 应用程序的关键。它们允许开发者在组件的不同生命周期阶段执行特定的逻辑,从而控制组件的行为和性能。正确理解和使用这些生命周期钩子,对于编写高质量的 Vue 代码至关重要。
相关参考资料推荐
- Vue 3 官方文档:这是学习 Vue 3 的最佳起点,提供了关于生命周期钩子的详细文档和示例。
- Vue.js 3.x 官方中文文档:中文版的官方文档,方便中文读者阅读和理解。
- Vue 3 Composition API 完全指南:官方指南中关于组合式 API 的部分,详细介绍了如何在 Vue 3 中使用组合式 API。
- Vue 3 生命周期钩子详解:官方文档中关于生命周期钩子的详细说明,包括每个钩子的调用时机和用途。
- Vue 3 组件生命周期钩子的使用:官方文档中关于如何在组合式 API 中使用生命周期钩子的示例和解释。
- Vue 3 组件生命周期钩子的使用:官方文档中关于如何在组合式 API 中使用生命周期钩子的示例和解释。
- Vue 3 组件生命周期钩子的使用:官方文档中关于如何在组合式 API 中使用生命周期钩子的示例和解释。
相关文章:
掌握Vue 3生命周期:从组合式API到高效代码实践
引言 在 Vue 3 中,生命周期的概念得到了进一步的优化和简化。Vue 3 引入了组合式 API(Composition API),这为开发者提供了更灵活的方式来组织和重用代码逻辑。与传统的选项式 API(Options API)相比&#x…...
使用cgroup对pgsql进行分库资源限制
系统:Centos7 pg版本:14.11 自建pgsql14中有很多个库,一个库对应一个租户,偶尔会出现单个租户执行慢sql影响全局的问题,目前官方也没有比较合适的处理方案或者插件 解决方案: 因为pgsql是多进程应用,所以正好可以使用linux自带的cgroup功能进行资源限制。定时将进程中…...
【网络安全】一文带你了解什么是【网络劫持】
网络劫持(Network Hijacking)是一种网络攻击,攻击者通过非法手段劫持网络通信,导致合法用户的数据流被拦截、篡改或重定向到攻击者控制的系统。这种攻击可以在各种网络层面上进行,包括域名系统(DNS…...
springcloud分布式架构网上商城 LW +PPT+源码+讲解
3系统分析 3.1可行性分析 在开发系统之前要进行系统可行性分析,目的是在用最简单的方法去解决最大的问题,程序一旦开发出来满足了用户的需要,所带来的利益也很多。下面我们将从技术、操作、经济等方面来选择这个系统最终是否开发。 3.1.1技术…...
【Linux】动态库的制作与使用
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
Vue框架引入
vue简介 1.1.vue是什么?Vue官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/ vue是一套构建用户界面的渐进式javascript框架 构建用户界面:将我们手里拿到的数据通过某种办法变成用户可以看见的界面前端工程师的职责:就是在合适的时候发出合适的请求,然后…...
贝叶斯估计(1):期末大乱炖
写在前面! 1 先验分布和后验分布 三种信息:总体信息、样本信息、先验信息 总体信息:“总体是正态分布”;样本信息:总体抽取的样本提供的信息,是最新鲜的信息;先验信息:在抽样之前就…...
电脑找回彻底删除文件?四个实测效果的方法【一键找回】
电脑数据删除了还能恢复吗?可以的,只要我们及时撤销上一步删除操作,还是有几率找回彻底删除文件。 当我们的电脑文件被彻底删除后,尽管恢复的成功率可能受到多种因素的影响,但仍有几种方法可以尝试找回这些文件。本文整…...
java开发报错
查了一下啊。...
基于python 的动态虚拟主机
内容动态,内容通过程序的执行结果返回。 通过编写脚本,完成配置,实现访问页面返回Hello World。 实现步骤: 1、安装python模块 dnf install python3-mod_wsgi 2、编写脚本 在/var/www/cgi-bin/目录下编写脚本: vim…...
绝地求生PUBG没有开始游戏按钮的解决办法
绝地求生是一款特别热门的战术竞技型射击类游戏,游戏中玩家需要在游戏地图上收集各种资源,并在不断缩小的安全区域内持武器对抗其他玩家,让自己生存到最后。当游戏最后场上只剩下一支队伍的时候即可获得游戏胜利。然而一些玩家在游玩绝地求生…...
开始尝试从0写一个项目--前端(一)
基础项目构建 创建VUE初始工程 确保自己下载了node.js和npm node -v //查看node.js的版本 npm -v //查看npm的版本 npm i vue/cli -g //安装VUE CLI 创建 以管理员身份运行 输入:vue ui 就会进入 点击创建 自定义项目名字,选择npm管理 结…...
【Java探索之旅】多态:向上下转型、多态优缺点、构造函数陷阱
文章目录 📑前言一、向上转型和向下转型1.1 向上转型1.2 向下转型 二、多态的优缺点2.1 多态优点2.2 多态缺陷 三、避免避免构造方法中调用重写的方法四、好的习惯🌤️全篇总结 📑前言 在面向对象编程中,向上转型和向下转型是常用…...
Linux上web服务器搭建(Apache、Nginx)
第五章 web服务器 第一节 DNS:对域名进行解析,查询对应的地址 1.1 web服务器简介 www是world wide web的缩写,也就是全球信息广播的意思 1.2.网址及HTTP简介 web服务器提供的这些数据大部分都是文件,那么我们需要在服务器端…...
Django QuerySet对象,exclude()方法
模型参考上一章内容: Django QuerySet对象,filter()方法-CSDN博客 exclude()方法,用于排除符合条件的数据。 1,添加视图函数 Test/app11/views.py from django.shortcuts import render from .models import Postdef index(re…...
Qt/C++音视频开发78-获取本地摄像头支持的分辨率/帧率/格式等信息/mjpeg/yuyv/h264
一、前言 上一篇文章讲到用ffmpeg命令方式执行打印到日志输出,可以拿到本地摄像头设备信息,顺藤摸瓜,发现可以通过执行 ffmpeg -f dshow -list_options true -i video“Webcam” 命令获取指定摄像头设备的分辨率帧率格式等信息,会…...
Go bufio包
bufio包: 带缓冲的I/O操作, 减少系统调用次数, 读取文件、网络数据。 bufio包 是什么 bufio 包是 Go 标准库中的一个非常有用的包,用于提供带缓冲的 I/O 操作。它通过缓冲来提高读取和写入的效率,可以有效减少系统调用…...
C++ 类和对象 拷贝构造函数
一 拷贝构造函数的概念: 拷贝构造函数是一种特殊的构造函数,用于创建一个对象是另一个对象的副本。当需要用一个已存在的对象来初始化一个新对象时,或者将对象传递给函数或从函数返回对象时,会调用拷贝构造函数。 二 拷贝构造函…...
C# —— Math对象
Math 数学类 提供了一些相关数学计算的属性和方法、四舍五入、向上求整、向下求整、开平方,几次方 最大值和最小值 sin cos 绝对值 方法 1.Math 常用的字段 Math.PI double x 2 * 180 / Math.PI; Console.WriteLine(x); 2 Math.Abs() 求绝对值 int a -3; Con…...
Face_recognition实现人脸识别
这里写自定义目录标题 欢迎使用Markdown编辑器一、安装人脸识别库face_recognition1.1 安装cmake1.2 安装dlib库1.3 安装face_recognition 二、3个常用的人脸识别案例2.1 识别并绘制人脸框2.2 提取并绘制人脸关键点2.3 人脸匹配及标注 欢迎使用Markdown编辑器 本文基于face_re…...
intv_ai_mk11快速上手:浏览器输入URL→发送‘帮我写周报’→获得带数据亮点的Word格式草稿
intv_ai_mk11快速上手:浏览器输入URL→发送帮我写周报→获得带数据亮点的Word格式草稿 1. 什么是intv_ai_mk11 intv_ai_mk11是一款基于Llama架构的AI对话助手,拥有7B参数规模,运行在GPU服务器上。它能像真人助手一样理解你的需求࿰…...
MetaTube插件:智能元数据整合引擎的技术架构深度解析
MetaTube插件:智能元数据整合引擎的技术架构深度解析 【免费下载链接】jellyfin-plugin-metatube MetaTube Plugin for Jellyfin/Emby 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-plugin-metatube 在Jellyfin/Emby媒体服务器生态系统中ÿ…...
Z-Image Atelier 生成动态效果预览:通过序列图像模拟简单动画过程
Z-Image Atelier 生成动态效果预览:通过序列图像模拟简单动画过程 最近在玩一个挺有意思的AI图像工具,叫Z-Image Atelier。它最吸引我的地方,不是生成单张多么精美的图片,而是它能帮你“脑补”出一段动态过程。简单来说ÿ…...
Self Service Password与LDAP集成实战:从部署到问题排查
1. Self Service Password与LDAP集成概述 自助密码重置功能已经成为企业IT基础设施中不可或缺的一部分。想象一下,当员工在深夜加班时忘记密码,又找不到IT支持人员,这种场景下的自助解决方案就显得尤为重要。Self Service Password࿰…...
从激光雷达到AI服务器:实战解析PCIe高速走线在车载与数据中心的不同设计策略
从激光雷达到AI服务器:实战解析PCIe高速走线在车载与数据中心的不同设计策略 在硬件设计领域,PCIe总线技术已经成为了高速数据传输的事实标准。从自动驾驶汽车的激光雷达到数据中心的AI加速卡,PCIe的身影无处不在。然而,看似相同的…...
Agent上线后有专人运营支持吗?深度解析AI Agent的全生命周期运维保障体系
随着AI Agent(智能体)在企业业务场景中的深度渗透,从简单的流程自动化到复杂的跨境贸易、研发辅助,企业对“数字员工”的期待已不再局限于单次的开发交付,而是转向了长期的稳定运行与持续进化。对于许多决策者而言&…...
益象创新与数谷智能,轻量化 AI 定制方案设计谁更优?
在企业数字化转型的下半场,人工智能(AI)的应用正从“大算力、大模型”的盲目崇拜,转向“轻量化、高适配”的务实落地上。对于中小型企业或大型企业的特定业务部门而言,动辄百万级的算力投入并不现实,一套能…...
Libre Barcode:终极免费条码字体解决方案,让条码生成变得简单高效
Libre Barcode:终极免费条码字体解决方案,让条码生成变得简单高效 【免费下载链接】librebarcode Libre Barcode: barcode fonts for various barcode standards. 项目地址: https://gitcode.com/gh_mirrors/li/librebarcode Libre Barcode 是一个…...
5步高效使用小说下载工具:零基础也能掌握的开源项目全攻略
5步高效使用小说下载工具:零基础也能掌握的开源项目全攻略 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 在数字阅读时代,拥有一款可靠的小说下载工具能让你…...
基于STM32单片机扫地机器人仿真系统设计 1、使用 STM32 单片机作为核心控制器
基于STM32单片机扫地机器人仿真系统设计 1、使用 STM32 单片机作为核心控制器; 2、选择超声波(1个)、红外线(两个,放在左右)两种传感器进行有效地避障; 3、使用角度传感器 MPU6050 测量角度,检测扫地机器人的运动状态,是否有倾倒; 4、OLED 屏显示超声波距…...
