当前位置: 首页 > news >正文

掌握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);}
};

在上面的示例中,createdmounted 和 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 通过将逻辑组织在不同的选项(如 datamethodscreatedmounted 等)中,而组合式 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&#xf…...

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

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

高效的后台管理系统——可进行二次开发

随着互联网技术的迅猛发展,企业的数字化管理变得愈加重要。后台管理系统作为数据存储与业务管理的核心,成为了现代企业不可或缺的一部分。今天我们要介绍的是一款名为 若依后台管理框架 的系统,它不仅支持跨平台应用,还能提供丰富…...