【vue】10.组件的生命周期-从Vue 2到Vue 3的演变

自Vue 2发布以来,它以其简单易用、灵活高效的特点赢得了众多开发者的喜爱。随着时间的推移,Vue 3在Vue 2的基础上进行了全面升级,其中包括对组件生命周期的调整。本文将首先回顾Vue 2的组件生命周期,然后重点介绍Vue 3组件生命周期的变化和特点。

一、Vue 2组件生命周期简介

组件生命周期指的是组件从创建到销毁的整个过程,这个过程被划分为几个特定的阶段,每个阶段都有对应的钩子函数供开发者介入组件的行为。Vue 2的组件生命周期主要包括四个阶段:创建前/后、挂载前/后、更新前/后和销毁前/后。以下是各个阶段的生命周期钩子:

  1. 创建前/后

    • beforeCreate:在实例初始化之后、数据观测和事件/侦听器配置之前调用。
    • created:在实例创建完成后调用,此时已完成数据观测、属性和方法的运算,但DOM结构还未生成。
  2. 挂载前/后

    • beforeMount:在挂载开始之前调用,此时已完成了模板的编译,但还未将数据渲染到页面上。
    • mounted:在el被新创建的vm.$el替换,并挂载到实例上之后调用。
  3. 更新前/后

    • beforeUpdate:数据更新时调用,发生在虚拟DOM打补丁之前。
    • updated:由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。
  4. 销毁前/后

    • beforeDestroy:在实例销毁之前调用,此时实例仍然完全可用。
    • destroyed:在实例销毁后调用,此时所有的事件监听器已被移除,子实例也被销毁。

二、Vue 3组件生命周期详解

Vue 3在Vue 2的基础上进行了一些调整,主要包括生命周期钩子的名称变化和组合式API的引入。

1. 生命周期钩子名称调整

  • 挂载阶段

    • beforeMount:与Vue 2相同,在挂载开始之前调用。
    • mounted:与Vue 2相同,在el被新创建的vm.$el替换,并挂载到实例上之后调用。
  • 更新阶段

    • beforeUpdate:与Vue 2相同,数据更新时调用。
    • updated:与Vue 2相同,虚拟DOM重新渲染和打补丁之后调用。
  • 销毁阶段

    • beforeUnmount:取代了Vue 2的beforeDestroy,在组件卸载之前调用。
    • unmounted:取代了Vue 2的destroyed,在组件卸载之后调用。

2. 组合式API生命周期钩子

Vue 3引入了组合式API,允许在setup函数中使用生命周期钩子。以下是一些常用的组合式API生命周期钩子:

  • onBeforeMount:在挂载开始之前调用。
  • onMounted:在组件挂载完成后调用。
  • onBeforeUpdate:在数据更新之前调用。
  • onUpdated:在数据更新之后调用。
  • onBeforeUnmount:在组件卸载之前调用。
  • onUnmounted:在组件卸载之后调用。
import { onMounted, onUpdated, onUnmounted } from 'vue';export default {setup() {onMounted(() => {console.log('组件已挂载');});onUpdated(() => {console.log('组件已更新');});onUnmounted(() => {console.log('组件已卸载');});}
};

3.Vue 3组件生命周期的详细介绍

上面是实例生命周期的图表。你现在并不需要完全理解图中的所有内容,但以后它将是一个有用的参考。(来自vue官网)

初始化阶段(Creation Phase)

在这个阶段,组件实例被创建,但尚未挂载到DOM上。

  • beforeCreate:这是组件生命周期中的第一个钩子,此时组件实例尚未被完全创建。在这个钩子中,无法访问组件的响应式数据(data)、计算属性(computed)和方法(methods),因此它的使用场景比较有限,通常用于插件开发中的初始化操作。

  • created:在组件实例创建之后立即调用。此时,组件的响应式数据和方法已经设置好了,但是DOM结构还未生成。这个钩子适合进行数据初始化和发送异步请求等操作,但应避免进行DOM操作,因为此时组件还未挂载。

挂载阶段(Mounting Phase)

在这个阶段,组件实例被挂载到DOM上。

  • beforeMount:在组件DOM被挂载到页面前调用。此时,模板已经编译完成,但数据尚未被渲染到页面上。可以访问到组件的根元素引用(this.$el),但该元素还未渲染数据。这个钩子可以用于执行一些预处理或清理工作。

  • mounted:在组件DOM被挂载到页面后调用。此时,组件已经完全渲染到页面上,可以访问到DOM结构。这个钩子通常用于执行需要访问到DOM的操作,比如集成第三方库、手动挂载子组件等。

更新阶段(Update Phase)

在这个阶段,组件的响应式数据发生变化,导致组件需要重新渲染。

  • beforeUpdate:在响应式数据发生变化之后,DOM更新之前调用。在这个钩子中,可以访问到更新前的DOM和新数据,适合在更新前访问现有的DOM状态。可以用于移除已添加的事件监听器或其他清理工作。

  • updated:在响应式数据发生变化后,DOM已经更新时调用。在这个钩子中应避免直接修改响应式数据,以免造成无限循环更新。可以用于执行依赖于更新后的DOM操作。

卸载阶段(Unmounting Phase)

在这个阶段,组件实例从DOM上卸载。

  • beforeUnmount:在组件实例被卸载之前调用。此时,组件实例仍然完全可用,是解绑监听器、取消Vue实例之间的事件通信等的理想时机。

  • unmounted:在组件实例被卸载之后调用。此时,组件实例的所有指令都被解绑,所有的事件监听器都被移除。这个钩子用于执行清理操作,如清除定时器、取消网络请求等。

三、总结

Vue 3组件生命周期在Vue 2的基础上进行了优化和调整,使得组件的管理更加灵活和高效。通过引入组合式API,Vue 3为开发者提供了更多组织代码的方式,使得组件逻辑更加清晰。了解和掌握Vue 3组件生命周期,对于开发者来说具有重要意义。

在未来的前端开发实践中,我们可以充分利用Vue 3的生命周期特性,打造更加优雅、高效的应用程序。让我们一起探索Vue 3的无限可能,为用户带来更好的体验!

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

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

相关文章

STM32 HAL 点灯

首先从点灯开始 完整函数如下: #include "led.h" #include "sys.h"//包含了stm32f1xx.h(包含各种寄存器定义、中断向量定义、常量定义等)//初始化GPIO口 void led_init(void) {GPIO_InitTypeDef gpio_initstruct;//打开…

计算合约方法的签名

计算合约方法的签名 通过智能合约实现 // SPDX-License-Identifier: MIT pragma solidity ^0.8.26;contract FunctionSelector {/*"transfer(address,uint256)"0xa9059cbb"transferFrom(address,address,uint256)"0x23b872dd*/function getSelector(stri…

【Java】方法的使用 —— 语法要求、方法的重载和签名、方法递归

目录 1. 方法基础知识 1.1 方法的概念 1.2 语法格式 * 注意事项【与C不同】 1.3 return —— 返回值的严格检查【比C语言严格】 2. 形参与实参的关系 3. 方法重载 3.1 什么是方法重载?为什么要方法重载? 3.2 方法重载的规则 4. 方法签名 5. 递…

鸿蒙开发:arkts Refresh 组件

基本概念 在 ArkTS 5.0 中,Refresh组件是用于实现下拉刷新功能的重要元素。它为用户提供了一种直观的方式来获取最新的数据。当用户在界面上对Refresh组件所在的区域进行下拉操作时,如果满足一定的触发条件,就会触发刷新事件,从而…

ClickHouse 神助攻:纽约城市公共交通管理(MTA)数据应用挑战赛

本文字数:13198;估计阅读时间:33 分钟 作者:The PME Team 本文在公众号【ClickHouseInc】首发 我们一向对开放数据挑战充满热情,所以当发现 MTA(城市交通管理局)在其官网发起了这样的挑战时&…

HarmonyOS开发5.0 net 启动界面设置

第一步、创建我们界面 第二步, 在EntryAbility中配置启动页面,在entry/src/main/ets/entryability/EntryAbility.ets中配置启动页面 配置如下 至此大功告成

算法笔记day10

目录 1.牛牛冲钻五 2.最长无重复子数组_牛客题霸_牛客网 3.重排字符串 1.牛牛冲钻五 算法思路&#xff1a; 特别简单的模拟题&#xff0c;没什么说的。 #include <iostream> #include <vector> #include <string> using namespace std; int main() { …

ETF申购赎回指南:详解注意事项与低费率券商推荐!

​ETF 申购&赎回 ETF申购赎回是个啥业务&#xff1f; 01 ETF申购、赎回是一种交易委托方式&#xff0c;指投资者通过申购方式(买入方向)获得ETF份额&#xff0c;通过赎回的方式&#xff08;卖出方向&#xff09;换掉/卖出ETF份额。ETF申购&#xff0c;通常是通过一篮子成…

LinkedList和链表之刷题课(下)

1. 给定x根据x把链表分割,大的结点放在x后面,小的结点放在x前面 题目解析: 注意此时的pHead就是head(头节点的意思) 基本上就是给定一个链表,我们根据x的值来把这个链表分成俩部分,大的那部分放在x后面,小的那部分放在x前面,并且我们不能改变链表本来的顺序,比如下面的链表,我…

UI 组件的二次封装

UI 组件的二次封装是指&#xff0c;在基础 UI 库的组件上进行自定义封装&#xff0c;以实现更贴合业务需求的功能和样式。通过二次封装&#xff0c;可以增强组件的复用性、便捷性和一致性&#xff0c;简化业务代码&#xff0c;同时降低后续维护成本。 1. 二次封装的原理 二次…

ELK + Filebeat + Spring Boot:日志分析入门与实践(二)

目录 一、环境 1.1 ELKF环境 1.2 版本 1.3 流程 二、Filebeat安装 2.1 安装 2.2 新增配置采集日志 三、logstash 配置 3.1 配置输出日志到es 3.2 Grok 日志格式解析 3.2 启动 logstash ​3.3 启动项目查看索引 一、环境 1.1 ELKF环境 springboot项目&#xff1a;w…

二百七十、Kettle——ClickHouse中增量导入清洗数据错误表

一、目的 比如原始数据100条&#xff0c;清洗后&#xff0c;90条正确数据在DWD层清洗表&#xff0c;10条错误数据在DWD层清洗数据错误表&#xff0c;所以清洗数据错误表任务一定要放在清洗表任务之后。 更关键的是&#xff0c;Hive中原本的SQL语句&#xff0c;放在ClickHouse…

一篇文章入门梅尔频率倒谱系数

文章目录 梅尔频率倒谱系数MFCC预处理预加重分帧加窗 FFT&#xff08;Fourier-Transform&#xff09;功率谱滤波器组梅尔频率倒谱系数&#xff08;MFCC&#xff09;均值归一化总结 参考文献 梅尔频率倒谱系数MFCC 梅尔倒谱系数&#xff08;Mel-scale FrequencyCepstral Coeffi…

Qt的信号槽机制学习一

一、Qt理论知识简记 &#xff08;一&#xff09;信号与槽[1] 信号与槽是Qt编程的基础&#xff0c;其使得处理界面上各个组件的交互操作变得比较直观和简单&#xff0c;GUI&#xff08;Graphical User Interface&#xff09;程序设计的主要工作就是对界面上各组件的信号进行相应…

程序员的相亲囧途:三万相亲费,能否换回真爱?

在快节奏的都市生活中&#xff0c;相亲已成为不少单身男女寻找另一半的重要途径。然而&#xff0c;宁波的唐先生却在这条路上遭遇了不小的挫折。28岁的他&#xff0c;身高1米78&#xff0c;本应是相亲市场上的“香饽饽”&#xff0c;却在“我主良缘”交了三万块钱相亲费后&…

【Android】使用TextView实现按钮开关代替Switch开关

介绍 Android 本身自己带的有开关控件&#xff0c;但是很多时候我们是不愿意使用这种开关的&#xff0c;感觉使用起来比较麻烦&#xff0c;特别是遇到需要延迟操作的情况。 比如有一个需求是这样的&#xff1a;我们需要打开一个设置&#xff0c;但是这个设置是否打开需要经过…

AI自媒体变现路径大盘点!建议收藏!

当下的我做为一人公司或者超级个体为目标的创业模式&#xff0c;无论是在写作、图文和短视频输出方面&#xff0c;我都是运用了N个AI工具来提升我的生产力。 这种创业模式就是一个人N个AI的模式&#xff0c;我们可以通过AI工具做提效来赚取差价&#xff0c;以时间复利来累计财…

Python的协程与传统的线程相比,是否能更有效地利用计算资源?在多大程度上,这种效率是可测量的?如何量化Python协程的优势|协程|线程|性能优化

目录 1. 协程与线程的基本概念 1.1 线程 1.2 协程 2. 协程的实现原理 2.1 基本示例 3. 协程与线程的效率对比 3.1 资源利用率 3.2 性能测试 4. 使用场景分析 4.1 适用场景 4.2 不适用场景 5. 性能监测与测量 5.1 使用时间记录 5.2 使用第三方库 6. 总结与展望 P…

服务器文件访问协议

服务器文件访问协议 摘要NFS、CIFS、SMB概述SMBWindows SMBLinux SambaPython SMB NFS 摘要 本篇博客参考网上文档和博客&#xff0c;对基于网络的服务器/主机的文件访问、共享协议进行简要总结&#xff0c;完整内容将会不断更新&#xff0c;以便加深理解和记忆 NFS、CIFS、S…

docker占用磁盘过多问题

我在windows系统上用docker&#xff0c;安装在C盘环境下&#xff0c;我发现C盘占用了大量的空间&#xff0c;查找后发现是docker的映像文件占用的&#xff0c;于是开始清理&#xff0c;中间还踩个坑&#xff0c;记录一下&#xff0c;下次需要的时候方便找。 踩坑 我本想移动映…