Vue 2 生命周期与 Vue 3 生命周期:介绍与差别对比

news2024/9/20 22:29:27

目录

引言:

一、Vue 2 生命周期介绍:

二、Vue 3 生命周期介绍:

注册周期钩子​

生命周期图示

生命周期 

三、Vue 2 生命周期与 Vue 3 生命周期的差别对比:


引言:

 Vue.js 是一款流行的 JavaScript 框架,被广泛用于构建现代化的用户界面。Vue 2 是 Vue.js 的旧版本,而 Vue 3 是最新的版本。本文将介绍 Vue 2 生命周期和 Vue 3 生命周期,并对两个版本进行对比,以帮助开发者更好地理解和使用 Vue.js。

一、Vue 2 生命周期介绍:

 Vue 2 生命周期由一系列钩子函数组成,这些钩子函数允许开发者在组件的不同生命周期阶段执行特定的操作。Vue 2 生命周期包括以下阶段:

beforeCreate:在实例初始化之后,数据观测 (data observation) 和事件配置 (event/watcher setup) 之前调用。

created:在实例创建完成后被调用,此时实例已完成数据观测,但尚未挂载到 DOM 上。

在实例创建完成后被立即同步调用。在这一步中,实例已完成对选项的处理,意味着以下内容已被配置完毕:数据侦听、计算属性、方法、事件/侦听器的回调函数。然而,挂载阶段还没开始,且 $el property 目前尚不可用。

beforeMount:在挂载开始之前被调用,相关的 render 函数首次被调用。

mounted:实例被挂载后调用,此时组件已经在 DOM 中渲染完成。

实例被挂载后调用,这时 el 被新创建的 vm.$el 替换了。如果根实例挂载到了一个文档内的元素上,当 mounted 被调用时 vm.$el 也在文档内。

注意 mounted 不会保证所有的子组件也都被挂载完成。如果你希望等到整个视图都渲染完毕再执行某些操作,可以在 mounted 内部使用 vm.$nextTick:

mounted: function () {
  this.$nextTick(function () {
    // 仅在整个视图都被渲染之后才会运行的代码
  })
}

beforeUpdate:数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。

updated:组件更新完成后调用,此时虚拟 DOM 已重新渲染并应用补丁。

在数据更改导致的虚拟 DOM 重新渲染和更新完毕之后被调用。

当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态。如果要相应状态改变,通常最好使用计算属性或 watcher 取而代之。

注意,updated 不会保证所有的子组件也都被重新渲染完毕。如果你希望等到整个视图都渲染完毕,可以在 updated 里使用 vm.$nextTick:

updated: function () {
  this.$nextTick(function () {
    //  仅在整个视图都被重新渲染之后才会运行的代码     
  })
}

activated: 被 keep-alive 缓存的组件激活时调用。

deactivated:被 keep-alive 缓存的组件失活时调用

 beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。

destroyed:实例销毁后调用,此时所有的事件监听器被移除,所有的子实例也被销毁。

errorCaptured 在捕获一个来自后代组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回 false 以阻止该错误继续向上传播。

你可以在此钩子中修改组件的状态。因此在捕获错误时,在模板或渲染函数中有一个条件判断来绕过其它内容就很重要;不然该组件可能会进入一个无限的渲染循环。

错误传播规则

  • 默认情况下,如果全局的 config.errorHandler 被定义,所有的错误仍会发送它,因此这些错误仍然会向单一的分析服务的地方进行汇报。

  • 如果一个组件的 inheritance chain (继承链)或 parent chain (父链)中存在多个 errorCaptured 钩子,则它们将会被相同的错误逐个唤起。

  • 如果此 errorCaptured 钩子自身抛出了一个错误,则这个新错误和原本被捕获的错误都会发送给全局的 config.errorHandler

  • 一个 errorCaptured 钩子能够返回 false 以阻止错误继续向上传播。本质上是说“这个错误已经被搞定了且应该被忽略”。它会阻止其它任何会被这个错误唤起的 errorCaptured 钩子和全局的 config.errorHandler

二、Vue 3 生命周期介绍:

每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模板,挂载实例到 DOM,以及在数据改变时更新 DOM。在此过程中,它也会运行被称为生命周期钩子的函数,让开发者有机会在特定阶段运行自己的代码。

注册周期钩子​

举例来说,onMounted 钩子可以用来在组件完成初始渲染并创建 DOM 节点后运行代码:

<script setup>
import { onMounted } from 'vue'

onMounted(() => {
  console.log(`the component is now mounted.`)
})
</script>

还有其他一些钩子,会在实例生命周期的不同阶段被调用,最常用的是 onMounted、onUpdated 和 onUnmounted。所有生命周期钩子的完整参考及其用法请参考 API 索引。

当调用 onMounted 时,Vue 会自动将回调函数注册到当前正被初始化的组件实例上。这意味着这些钩子应当在组件初始化时被同步注册。例如,请不要这样做:

setTimeout(() => {
  onMounted(() => {
    // 异步注册时当前组件实例已丢失
    // 这将不会正常工作
  })
}, 100)

 注意这并不意味着对 onMounted 的调用必须放在 setup() 或 <script setup> 内的词法上下文中。onMounted() 也可以在一个外部函数中调用,只要调用栈是同步的,且最终起源自 setup() 就可以。

生命周期图示

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

生命周期 

1、setup() : 开始创建组件之前,在 beforeCreate 和 created 之前执行,创建的是 data 和 method

2、onBeforeMount() : 组件挂载到节点上之前执行的函数;

3、onMounted() : 组件挂载完成后执行的函数;

4、onBeforeUpdate(): 组件更新之前执行的函数;

5、onUpdated(): 组件更新完成之后执行的函数;

6、onBeforeUnmount(): 组件卸载之前执行的函数;

7、onUnmounted(): 组件卸载完成后执行的函数;

8、onActivated(): 被包含在 <keep-alive> 中的组件,会多出两个生命周期钩子函数,被激活时执行;

9、onDeactivated(): 比如从 A 组件,切换到 B 组件,A 组件消失时执行;

10、onErrorCaptured(): 当捕获一个来自子孙组件的异常时激活钩子函数。
 

三、Vue 2 生命周期与 Vue 3 生命周期的差别对比:

vue2           ------->      vue3
 
beforeCreate   -------->      setup(()=>{})
created        -------->      setup(()=>{})
beforeMount    -------->      onBeforeMount(()=>{})
mounted        -------->      onMounted(()=>{})
beforeUpdate   -------->      onBeforeUpdate(()=>{})
updated        -------->      onUpdated(()=>{})
beforeDestroy  -------->      onBeforeUnmount(()=>{})
destroyed      -------->      onUnmounted(()=>{})
activated      -------->      onActivated(()=>{})
deactivated    -------->      onDeactivated(()=>{})
errorCaptured  -------->      onErrorCaptured(()=>{})

总结: Vue2和Vue3钩子变化不大,beforeCreate 、created  两个钩子被setup()钩子来替代。

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

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

相关文章

仿真数字正弦波发生器程序

1&#xff09;构建这个IOC程序的程序框架&#xff1a; orangepiorangepi5:/usr/local/EPICS/program/simScope$ ls bin configure db dbd iocBoot lib Makefile simScopeApp2&#xff09;修改configure下RELEASE文件&#xff0c;添加所需的支持模块&#xff0c;此IOC程…

ThinkPad电脑HDMI接口失灵如何解决?

ThinkPad电脑HDMI接口失灵如何解决&#xff1f; 如果平时正常使用的外接显示器&#xff0c;某天突然无法使用了&#xff0c;重新插拔依然无信号的话&#xff0c;可以打开系统的设备管理器&#xff08;快捷键winx&#xff09;&#xff0c;首先看一下监视器的识别情况&#xff0c…

人声分离神仙网站,用过都说好~

在生活中好听的音乐有千千万的&#xff0c;音乐是非常容易可以找到下载下来的&#xff0c;但是背景音乐相当不容易找的&#xff0c;我们看的某短视频的背景音乐我们觉得不错的&#xff0c;想要下载下来的时候&#xff0c;我们都会无从下手不知道如何才可以找到这个相关的背景音…

内网渗透-内网信息收集

内网信息收集 前言 当我们进行外网信息收集&#xff0c;漏洞探测以及漏洞利用后&#xff0c;获得了主机的权限后&#xff0c;我们需要扩大渗透的战果时&#xff0c;这是我们就要进行内网的渗透了&#xff0c;内网渗透最重要的还是前期的信息收集的操作了&#xff0c;就是我们的…

文件加密丨最值得收藏的3种方法

信息的安全性变得越来越重要。文件加密作为一种有效的信息安全保护手段&#xff0c;广泛应用于各类场景。 今天就分享3种值得小白收藏的文件加密的方法&#xff1a; 方法一 简单加密 简单加密是一种常见的文件加密方法&#xff0c;其原理是通过使用简单的加密算法和密钥&…

YUV格式详解

YUV 可以将亮度信息&#xff08;Y&#xff09;与色度信息&#xff08;UV&#xff09;分离&#xff0c;没有UV信息一样可以显示完整图像&#xff0c;只不过是黑白的,也是一种颜色编码方法&#xff0c;&#xff0c;YUV和RGB可以通过公式互相转换&#xff0c;图片中每一个像素的颜…

响应式网站建站源码系统+完整的搭建教程

互联网已成为人们生活中不可或缺的一部分。在这个信息爆炸的时代&#xff0c;企业和个人对网站的需求不再仅仅是展示信息&#xff0c;而是要求网站能够适应各种设备、屏幕尺寸和网络环境&#xff0c;以便更好地与用户进行互动。因此&#xff0c;响应式网站建设应运而生&#xf…

使用Jenkins触发gitlab的webhook

满足条件&#xff1a; 首先手动构建可以完成构建 例如&#xff1a; 打开项目点击配置 在“Build Triggers”栏勾选&#xff0c;Build when a change is pushed to GitLab. GitLab webhook &#xff1b;如下 复制URL链接&#xff0c;我的链接是&#xff1a;http://192.168.44…

23款奔驰E300L升级几何多光束大灯 车辆自检等功能

奔驰几何多光束大灯核心特点就是通过内部的84颗可独立控制的LED光源&#xff0c;行车远光灯会甄别对向驶来的车辆或者行人&#xff0c;并且动态的跟随目标&#xff0c;之后阴影话该区域&#xff0c;避免晃到车辆和行人。 奔驰升级几何多光束 LED 大灯&#xff08;MULTIBEAM LED…

TypeError: data.reduce is not a function:数据类型不匹配

错误展示&#xff1a; 错误分析&#xff1a; 首先来看看前端代码&#xff1a;我表格绑定的数据模型是tableData&#xff0c;而我tableData定义的是一个数组 其次看看后端给的数据&#xff1a; 传递的是一个对象&#xff0c;而不是一个数组&#xff01; 这样原因就找出了&…

Spring如何使用三级缓存解决循环依赖问题?

Spring框架中采用了"三级缓存"&#xff08;三级缓存是一种缓存解决循环依赖的数据结构&#xff09;来解决循环依赖问题&#xff0c;其中缓存包括singletonObjects、earlySingletonObjects和singletonFactories。 第一级缓存 - singletonObjects&#xff1a; 在Spr…

Qt跨平台(统信UOS)各种坑解决办法

记录Qt跨平台的坑&#xff0c;方便日后翻阅。 一、环境安装 本人用的是qt 5.14.2.直接在官网下载即可。地址&#xff1a;Index of /archive/qt/5.14/5.14.2 下载linux版本。 下载之后 添加可执行权限。 chmod 777 qt-opensource-linux-x64-5.14.2.run 然后执行。 出现坑1…

个头小却很能“打”!合合信息扫描全能王推出A4便携式打印机

过去&#xff0c;为了打印一份清晰工整的材料&#xff0c;人们往往需要到专门的打印店或办公室。处理文件。对于销售、物流人员、工程师、医生、媒体记者等出差频率较高的职业而言&#xff0c;打印是一项“不太友好”的需求。为解决移动打印难题&#xff0c;近期&#xff0c;合…

嵌入式学习笔记(63)指针到底是什么

3.1.1.指针变量和普通变量的区别 首先必须非常明确&#xff1a;指针的实质就是个变量&#xff0c;它跟普通变量没有任何本质区别。指针完整的名字叫指针变量&#xff0c;简称指针。 3.1.2.为什么需要指针 (1)指针的出现是为了实现间接访问。在汇编中都有间接访问&#xff08…

众和策略可靠吗?b股指数是什么代码?

可靠 B股指数&#xff08;BShare Index&#xff09;是指由上海证券买卖所和深圳证券买卖所一起编制的反映我国两个证券商场B股出资价值变化的指数。作为我国证券商场中的重要指数之一&#xff0c;许多出资者都想了解B股指数的代码是什么。 B股指数代码 B股指数代码是指B股买卖…

应届生如何找到适合自己的项目

去开源网站 搜索技术点项目, 按照星级排序 不要只是跟着敲代码 那样什么都学不到,脑子是停转的 要自己理解业务流程,然后自己先试着实现,简单的crud要会,复杂的肯定会遇到问题,这个时候再去参考他给的代码 选择以下比较通用的业务来深度耕耘 模块如何吃透 例如权限认证: 功能实…

MutationObserver详解

MutationObserver API 让我们能监听 DOM 树变化&#xff0c;该 API 设计用来替换掉在 DOM 3 事件规范中引入的 Mutation events。 Mutation events 是同步触发的&#xff0c;每次变动都会触发一次调用。 MutationObserver API 是异步触发的&#xff0c; DOM 的变动并不会马上触…

YOLOv5— Fruit Detection

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客 &#x1f366; 参考文章&#xff1a;365天深度学习训练营-第7周&#xff1a;咖啡豆识别&#xff08;训练营内部成员可读&#xff09; &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制](https…

重庆助理工程师申请步骤及注意事项

目录 一、前言二、步骤1. 职称系统网址 2. 一定使用谷歌浏览器&#xff0c;其他白搭三、材料准备1.思想和工作-要手写签字并盖单位公章&#xff0c;无模板2.近五年年度考核-填优秀&#xff0c;并改单位公章&#xff0c;无模板 四、流程1.单位公示要公示5个工作日&#xff0c;再…

量化网络的注意事项

二&#xff0c;量化算术 模型量化过程可以分为两部分&#xff1a;将模型从 FP32 转换为 INT8&#xff0c;以及使用 INT8 进行推理。本节说明这两部分背后的算术原理。如果不了解基础算术原理&#xff0c;在考虑量化细节时通常会感到困惑。 2.1&#xff0c;定点和浮点 定点和…