掌握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 中使用生命周期钩子的示例和解释。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/43189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node-sass 老版本4.14.0 安装失败解决办法

旧项目 npm install 发现 node-sass 安装 失败 切换淘宝镜像之后 不能完全解决问题。因为需要编译,本地没有Python环境不能实现 安装node-sass时,在install阶段会从Github上下载一个叫binding.node的文件,而「GitHub Releases」里的文件…

C++编译链接原理

从底层剖析程序从编译到运行的整个过程 三个阶段 一、编译阶段二、链接阶段三、运行阶段 为了方便解释,给出两端示例代码,下面围绕代码进行实验: //sum.cpp int gdata 10; int sum(int a,int b) {return ab; }//main.cpp extern int gdata…

Stream流的简单用法

filter //stream流中的filter //filter 方法用于通过设置的条件过滤出元素。以下代码片段使用 filter 方法过滤掉空字符串&#xff1a; List<String> filter Arrays.asList("mz", "", "mz55", "m", "MZ"); Stream&l…

初始redis:在Ubuntu上安装redis

1.先切换到root用户 使用su命令切换到root 2.使用apt命令来搜索redis相关的软件包 命令&#xff1a;apt search redis 3.下载redis 命令&#xff1a; apt install redis 在Ubuntu 20.04中 &#xff0c;下载的redis版本是redis5 4.查看redis状态 命令&#xff1a; netst…

Python自动化测试系列[v1.0.0][高效自动化设计]

Python多线程应用于自动化测试 将多线程在测试巧妙地应用&#xff0c;确实会带来很多好处&#xff0c;并且这是充分利用机器资源执行高效率测试很好的方式 # -*- coding: utf-8 -*- import threading from time import ctime import time from selenium import webdriverdef …

LLM 入门与实践(四) Yi 部署与分析

本文截取自20万字的《PyTorch实用教程》&#xff08;第二版&#xff09;&#xff0c;敬请关注&#xff1a;《Pytorch实用教程》&#xff08;第二版&#xff09;无论是零基础入门&#xff0c;还是CV、NLP、LLM项目应用&#xff0c;或是进阶工程化部署落地&#xff0c;在这里都有…

python对象

类 我们目前所学习的对象都是Python内置的对象但是内置对象并不能满足所有的需求&#xff0c;所以我们在开发中经常需要自定义一些对象类&#xff0c;简单理解它就相当于一个图纸。在程序中我们需要根据类来创建对象类就是对象的图纸&#xff01;我们也称对象是类的实例&#…

JAVA--IO流

一、IO流什么&#xff1f; I/O是Input/output的缩写&#xff0c;用于处理设备之间的数据传输。如读/写文件、网络通讯。 java程序中&#xff0c;对于数据的输入、输出是以流&#xff08;Stream)的方式进行。 Java.io包下提供了各种流类和接口&#xff0c;用以获取不同种类的数…

web自动化(六)unittest 测试报告跳过用例

三种类型测试报告&#xff1a;unittest.TextTestRunner、BeautifulReport、HTMLTestRunner Python3.0 无法直接安装 HTMLTestRunner 安装 XTestRunner pip install XTestRunner安装 BeautifulReport pip install BeautifulReportimport unittestclass TestSkipCase(unittest…

ELfK logstash filter模块常用的插件 和ELFK部署

ELK之filter模块常用插件 logstash filter模块常用的插件&#xff1a; filter&#xff1a;表示数据处理层&#xff0c;包括对数据进行格式化处理、数据类型转换、数据过滤等&#xff0c;支持正则表达式 grok 对若干个大文本字段进行再分割成一些小字段 (?<字段名…

【算法篇】KMP算法,一种高效的字符串匹配算法

我们今天了解一个字符串匹配算法-KMP算法&#xff0c;内容难度相对来说较高&#xff0c;建议先收藏再细品&#xff01;&#xff01;&#xff01; KMP算法的基本概念 KMP算法是一种高效的字符串匹配算法&#xff0c;由D.E.Knuth&#xff0c;J.H.Morris和V.R.Pratt提出的&#…

LLMs之gptpdf:gptpdf的简介、安装和使用方法、案例应用之详细攻略

LLMs之gptpdf&#xff1a;gptpdf的简介、安装和使用方法、案例应用之详细攻略 目录 gptpdf的简介 1、处理流程 第一步&#xff0c;使用 PyMuPDF 库&#xff0c;对 PDF 进行解析出所有非文本区域&#xff0c;并做好标记&#xff0c;比如: 第二步&#xff0c;使用视觉大模型&…

离婚后,孩子就读私立高中的高昂学费谁承担?

江苏省南京市六合区人民法院审结一起抚养费纠纷案件&#xff0c;认定夫妻双方在决定孩子教育事务上均存在责任&#xff0c;为保障临近高考的未成年子女的切身利益&#xff0c;认定由夫妻双方按比例承担教育费。   2015年6月&#xff0c;李某与王某离婚&#xff0c;双方之子小…

PCL 有序点云的法线估计(使用积分图进行法线估计)

使用积分图进行法线估计 一、概述1.1 概念1.2 有序点云与无序点云1.2.1 有序点云1.2.2 无序点云1.3 代码讲解二、代码实现三、结果示例一、概述 1.1 概念 使用积分图进行法线估计:计算一个有序点云的法线,注意该方法只适用于有序点云。 1.2 有序点云与无序点云 有序点云与无…

MySQL安装时initializing database失败

问题页面&#xff1a; 解决方法&#xff1a; 1.勾选红框中的选项&#xff1a; 2.将下图红框中全部改为英文&#xff1a; 然后一路next就可以了。

cs231n作业1——KNN

参考文章&#xff1a;assignment1——KNN KNN 测试时分别计算测试样本和训练集中的每个样本的距离&#xff0c;然后选取距离最近的k个样本的标签信息来进行分类。 方法1&#xff1a;Two Loops for i in range(num_test):for j in range(num_train):dist X[i, :] - self.X…

vue3使用方式汇总

1、引入iconfont阿里图库图标&#xff1a; 1.1 进入阿里图标网站&#xff1a; iconfont阿里&#xff1a;https://www.iconfont.cn/ 1.2 添加图标&#xff1a; 1.3 下载代码&#xff1a; 1.4 在vue3中配置代码&#xff1a; 将其代码复制到src/assets/fonts/目录下&#xff1…

Mysql之Using index for skip scan

一、Using index for skip scan 在 MySQL 中&#xff0c;EXPLAIN 语句用于显示查询执行计划&#xff0c;帮助我们理解查询是如何被执行的&#xff0c;以及如何优化查询。其中&#xff0c;Extra 列提供了关于查询执行的一些额外信息。当 Extra 列显示 Using index for skip sca…

CF F. Alex‘s whims

原题链接&#xff1a;Problem - 1899F - Codeforces 题目大意&#xff1a;要求构建出一颗树&#xff0c;多次询问树的叶节点之间的距离有没有达到要求的距离&#xff0c;如果有直接输出-1 -1 -1&#xff0c;如果没有可以断开一条边和连上一条边&#xff0c;输出x y z&#xff…

mp4视频太大怎么压缩不影响画质,mp4文件太大怎么变小且清晰度高

在数字化时代&#xff0c;我们常常面临视频文件过大的问题。尤其是mp4格式的视频&#xff0c;文件大小往往令人望而却步。那么&#xff0c;如何在不影响画质的前提下&#xff0c;有效地压缩mp4视频呢&#xff1f;本文将为您揭秘几种简单实用的压缩技巧。 在分享和存储视频时&am…