【Vue】从vue2到vue3,生命周期函数有何变化之详解
创始人
2024-03-20 23:58:48
0

vue2与vue3生命周期的对比:

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()钩子来替代。

vue2的生命周期

在这里插入图片描述

  • new Vue()
    创建一个Vue实例

  • Init Events&Lifecycle
    创建前:
    DOM对象:el:undefined
    data对象: data:undefined
    声明的变量:message:undefined

  • Init injections & reactivity
    创建完毕:
    DOM对象:el:undefined
    data对象: data:[object Object]
    声明的变量:message:undefined

在这里插入图片描述
整体阶段开始编译模版,根据data中的数据和指令生成HTML,此时还没有开始渲染,仅存在于内存中。

  • beforeMount
    挂载前
    完成模版编译,但是还未挂载到页面。
    DOM对象:el:undefined
    data对象: data:[object Object]
    声明的变量:message:“Vue的生命周期”
  • mounted
    挂载结束,已渲染到页面。
    DOM对象:el:[object HTML DivElement]
    data对象:data:[object Object]
    声明的变量:message:”Vue的生命周期“
  • beforeUpdate
    更新前状态
    状态更新之前执行,此时data中的状态值是最新的,但界面还没开始渲染,是旧数据
    DOM对象:el:[object HTMLDivElement]
    data对象:data:[object Object]
    声明的变量:message:“被修改了”
  • updated
    更新完成
    状态更新完成后执行,此时界面显示data的最新数据,即界面已被渲染
  • beforeDestroy
    销毁前
    实例准备销毁,但还没被销毁,实例属性方法还可以用
    DOM对象:el:[object HTMLDivElement]
    data对象:data:[object Object]
    声明的变量:message:“Vue的生命周期”
  • destoryed
    销毁完成
    实例已销毁,所有内容均不可使用
    DOM对象:el:[object HTMLDivElement]
    data对象:data:[object Object]
    声明的变量:message:“Vue的生命周期”

beforeCreate():实例在内存中被创建出来,还没有初始化好data和methods属性
create():实例已经在内存中创建,已经初始化好data和method,此时还没有开始编译模版。
beforeMount():已经完成了模版的编译,还没有挂载到页面中。
mounted():将编译好的模版挂在到页面指定的容器中显示。
beforeUpdate():状态更新之前执行函数,此时data中的状态值是最新的,但是界面上显示的数据还是旧的,因为还没有开始重新渲染DOM节点。
updated():此时data中的状态值和界面上显示的数据都已经完成了更新,界面已经被重新渲染好了!
beforeDestroy():实例被销毁之前。
destroyed():实例销毁后调用,Vue实例指示的所有东西都会解绑,所有的事件监听器都会被移除,所有的子实例也都会被销毁。组件已经被完全销毁,此时组件中所有的data、methods以及过滤器,指令等,都已经不可用了。

在实际开发中的使用:

beforeCreate: 可以在这函数中初始化加载动画
created:做一些数据初始化,实现函数自执行
mounted:调用后台接口进行网络请求,拿回数据,配合路由钩子做一些事情
destoryed:当前组件已被删除,清空相关内容
mounted中做网络请求和重新赋值,在destoryed中清空页面数据。

还有个比较特殊的钩子函数nextTick(),数据更新后的dom操作,写在该函数里面

vue3的生命周期

在这里插入图片描述

setup():开始创建组件之前,在beforeCreated和created之前执行,创建的是data和method
onBeforeMount():组件挂载到节点上之前执行的函数;
onMounted():组件挂载完成后执行的函数;
onBeforeUpdate():组件更新之前执行的函数;
onUpdate():组件更新完成之后执行的函数;
onBeforeUnmount():组件卸载之前执行的函数;
onUnmounted():组件卸载完成后执行的函数;
onActivated():被包含在< keep-alive >中的组件,会多出两个生命周期钩子函数,被激活时执行;
onDeactivated():比如从A组件,切换到B组件,A组件消失时执行;
onErrorCaptured():当捕获一个来自子孙组件的异常时激活钩子函数。

代码:


相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...