【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前面,并且我们不能改变链表本来的顺序,比如下面的链表,我…

近似线性可分支持向量机的原理推导

近似线性可分的意思是训练集中大部分实例点是线性可分的&#xff0c;只是一些特殊实例点的存在使得这种数据集不适用于直接使用线性可分支持向量机进行处理&#xff0c;但也没有到完全线性不可分的程度。所以近似线性可分支持向量机问题的关键就在于这些少数的特殊点。 相较于…

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…

Mysql通过zip安装使用

文章目录 MySQL安装步骤‌下载MySQL安装包‌解压并配置‌环境变量‌初始化并启动数据库‌MySQL配置步骤验证安装是否成功‌ MySQL重新启动Linux系统windows系统 MySQL安装步骤‌ 下载MySQL安装包‌ 访问MySQL官方网站&#xff08;https://dev.mysql.com/downloads/&#xff0…

串口读数据无法获取的原因

一般无法读取导数据,通常是读数据时间设定有问题,通过修改设定时间就可以轻松读取数据. BOOL OpenComPort(const int port,int flag) { CString strComCode; strComCode.Format(_T(“COM%d”),port); hComCreateFile(strComCode,//COM1口 GENERIC_READ|GENERIC_WRITE, //允许读…

面向对象编程——抽象类和接口

抽象类的特性&#xff1a; 抽象类不能直接实例化对象抽象方法不能被private、final、static修饰的抽象类必须被继承&#xff0c;并且继承后子类必须要重写父类中的抽象方法&#xff0c;否则子类也是抽象类&#xff0c;必须使用abstract修饰抽象类中不一定包含抽象方法&#xf…

Vue3与pywebview获取本地文件夹的绝对路径

1、Vue端 <template><div><button click"selectFolder">选择文件夹</button><button click"showFolder">显示文件夹</button><p>{{ folderPath }}</p></div> </template><script> exp…

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

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

vue 实现图片预览功能并显示在弹窗的最上方

vue 实现图片预览功能并显示在弹窗的最上方 在 components 下新建一个文件夹 ImagePreview 使用 preview-teleported 来实现图片穿透功能 让预览的图片显示在最上方 代码如下&#xff1a; <template><el-image:src"${realSrc}"fit"cover":sty…

Qt的信号槽机制学习一

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