掌握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…...

1-3分钟爆款视频素材在哪找啊?这9个热门爆款素材网站分享给你
在如今快节奏的时代,短视频已成为吸引观众注意力的黄金手段。然而,要制作出1-3分钟的爆款视频,除了创意和剪辑技巧外,选择合适的素材至关重要。那么,哪里可以找到那些能让你的视频脱颖而出的爆款素材呢?不用…...

武汉免费 【FPGA实战训练】 Vivado入门与设计师资课程
一.背景介绍 当今高度数字化和智能化的工业领域,对高效、灵活且可靠的技术解决方案的需求日益迫切。随着工业 4.0 时代的到来,工业生产过程正经历着前所未有的变革,从传统的机械化、自动化逐步迈向智能化和信息化。在这一背景下&…...

【vite创建项目】
搭建vue3tsvitepinia框架 一、安装vite并创建项目1、用vite构建项目2、配置vite3、找不到模块 “path“ 或其相对应的类型声明。 二、安装element-plus1、安装element-plus2、引入框架 三、安装sass sass-loader1、安装sass 四、安装vue-router-next 路由1、安装vue-router42搭…...

最优化方法 运筹学【】
1.无约束 常用公式 线搜索准则:求步长 精确线搜索(argmin) 最速下降:sd:线性收敛 2.算法 SD dk:付梯度-g newton dk:Gkd-g 二阶收敛,步长为1 阻尼牛顿:步长用先搜…...

探索 WebKit 的动感世界:设备方向和运动支持全解析
探索 WebKit 的动感世界:设备方向和运动支持全解析 随着移动设备的普及,网页应用对设备方向和运动的感知需求日益增长。WebKit 作为众多流行移动浏览器的渲染引擎,提供了对设备方向和运动的全面支持,使得 Web 应用能够根据设备的…...

高考假期预习指南
IT专业入门,高考假期预习指南 对于希望进入IT行业的学生来说,假期是学习信息技术的最佳时机。 在信息化快速发展的时代,IT行业的发展前景广阔,但高技能要求使新生可能感到迷茫。 建议新生制定详细的学习计划,包括了解…...

Spring Boot 事件监听机制工作原理
前言: 我们知道在 Spring 、Spring Boot 的启动源码中都大量的使用了事件监听机制,也就是我们说的的监听器,监听器的实现基于观察者模式,也就是我们所说的发布订阅模式,这种模式可以在一定程度上实现代码的解耦&#…...

【AI大模型】驱动的未来:穿戴设备如何革新血液、皮肤检测与营养健康管理
文章目录 1. 引言2. 现状与挑战3. AI大模型与穿戴设备概述4. 数据采集与预处理4.1 数据集成与增强4.2 数据清洗与异常检测 5. 模型架构与训练5.1 高级模型架构5.2 模型训练与调优 6. 个性化营养建议系统6.1 营养建议生成优化6.2 用户反馈与系统优化 7. 关键血液成分与健康状况评…...

【FFmpeg】avcodec_open2函数
目录 1. avcodec_open21.1 编解码器的预初始化(ff_encode_preinit & ff_decode_preinit)1.2 编解码器的初始化(init)1.3 释放编解码器(ff_codec_close) FFmpeg相关记录: 示例工程ÿ…...

matlab:对带参数a关于x的方程求解
题目 讲解 简洁对各个式子的内部含义用浅显易懂的话语总结出来了,耐心体会 f(a) (x)exp(x)x^ax^(sqrt(x))-100;%因为下面的fzero的第一个数需要一个fun,所以这里有两个句柄,第一个a是输入的,第二个x是需要被解出的 A0:0.1:2;%创…...