Vue生命周期详解学习笔记

news/2025/2/12 1:11:44/

生命周期

  1. 生命周期又名生命周期回调函数,生命周期函数,生命周期钩子。
  2. 生命周期是Vue在关键时刻帮我们调用的一些特殊名称的函数。
  3. 生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。
  4. 生命周期中的this指向vm或组件实例对象。

钩子函数

钩子函数用来描述Vue实例从创建到销毁整个生命周期。
在这里插入图片描述

八大钩子数分别是:

beforeCreate,created,beforeMount,mounted(挂载),beforeUpdate,updated(更新),beforeDestory,destoryed(销毁)

实例创建

            beforeCreate() {console.log('beforeCreate')console.log(this);//vm},created() {console.log('created')},
  • beforeCreate前的init:初始化:生命周期、事件,但数据代理还未开始
    data:{n:1},vm._data和vm.n都不存在。
  • beforeCreate:此时,无法通过vm访问到data中的数据、methods中的方法。
     beforeCreate() {console.log('beforeCreate')console.log(this);//vmdebugger;//只分析到这里代码停到这里},
    
  • beforeCreate之后的init:数据监测,数据代理。
  • created:此时,可以通过vm访问到data中的数据,methods中配置的方法。

页面挂载

 beforeMount() {console.log('beforeMount');console.log(this);//vm// debugger;//只分析到这里代码停到这里},// vue完成模板的解析并把初始的真实DOM元素放入页面后(挂载完毕)调用mountedmounted() {console.log('mounted', this.$el instanceof HTMLElement)//mounted 是真实dom},
  • 下一阶段,Vue开始解析模板,生成虚拟DOM(内存中),页面还不能显示解析好的内容。
    有el选项,无template选项,解析el的外部html做为模板,检测div是否属于模板,可以给div绑定:x=“n”,可以通过查看是否解析来看。
    在这里插入图片描述

无el选项,当vm.$mounted(el)被调用,检测是否有template选项,进入下一步。
有el选项,有template选项,解析template进入渲染函数
在这里插入图片描述

将html内容放入单引号不换行不报错,或者换行将单引号换成反引号,就不会报错。

在这里插入图片描述

根据报错的提示,一个template只能有一个根元素,所以需要将内容用div包裹.这样就不报错了,但是这样的话div的root类名就不存在了。

  • beforeMount页面呈现的是未经Vue编译的DOM结构;所有对DOM的操作,最终都不奏效。
    beforeMount() {console.log('beforeMount');console.log(this);//vmdebugger;//只分析到这里代码停到这里},
    
    如果没有debugger断点,控制台都不会显示操作DOM的结果。
  • 将内存中的虚拟DOM转为真实DOM插入页面(将vm$el替换el)
  • mounted:此时页面中呈现的是经过Vue编译的DOM,对Dom操作均有效(尽可能避免)。至此初始化过程结束,一般在此进行:开启定时器、发送网络请求、订阅消息、绑定自定义事件、等初始化操作。

数据更新

beforeUpdate() {console.log('beforeUpdate')console.log(this.n)// debugger;},updated() {console.log('updated')console.log(this.n)// debugger;},
  • mounted挂载后,当数据发生改变会先调用beforeUpdate,此时,数据是新的,页面是旧的。页面尚未和数据保持同步。根据新数据,生成新的虚拟DOM,随后与旧的虚拟DOM进行比较,最终完成页面更新,即:完成了Model->View的更新,更新完后,页面和数据保持同步,数据是新的,页面也是新的。

实例销毁

            beforeDestroy() {console.log('beforeDestroy')},destroyed() {console.log('destroyed')},
  • 当vm.$destroy()调用时,beforeDestroy:此时,vm中所有的:data、methods、指令等等,都处于可用状态,马上要执行销毁过程,一般在此阶段:关闭定时器,取消订阅消息,解绑自定义事件等收尾操作。

  • vm.$destroy()完全销毁一个实例,清理它与其它组件实例的连接,解绑它的全部指令及事件监听器(自定义事件)。
    在这里插入图片描述

    console.log是原生的do事件不是自定义事件所以销毁后还是存在的

总结

常用的生命周期钩子:

  1. mounted,发送ajax请求,启动定时器,绑定自定义事件,订阅消息等【初始化操作】。
  2. beforeDestroy:清除定时器,解绑自定义事件、取消订阅消息等【收尾工作】。

关于销毁Vue实例

  1. 销毁后借助Vue开发者工具看不到任何信息。
  2. 销毁后自定义事件会失效,但原生DOM事件依然有效。
  3. 一般不会再beforeDestroy操作数据,因为即使操作数据,也不会再触发更新流程了。

http://www.ppmy.cn/news/905571.html

相关文章

室内定位技术之UWB篇

关注、星标公众号,直达精彩内容 来源:网络素材 伴随通信行业的发展和物联网行业的兴起,室内定位技术因强大的定位能力,迎来了发展的黄金时期。并且对于定位精度高,抗干扰能力要求高的应用场合,UWB定位技术应…

NCS8803 HDMI转eDP 电路设计 控制软件 调试 学习

因项目需要设计一个HDMI转eDP的显示驱动接口电路板。 查找资料后选择了新港海岸的NCS8803显示接口芯片,考虑到其电路设计简单,有参考电路,提供专门调试软件进行电路板音视频调试。由于网上资料少,一些设计调试记录,分享共大家讨论学习。 NCS8803是一个低功耗的HDMI-to-d…

Direct3D 12——模板——参数的简介

描述深度/模板状态 要描述深度/模板状态,就需要填写D3D12_DEPTH_STENCIL_DESC实例 typedef struct D3D12_DEPTH_STENCIL_DESC{BOOL DepthEnable;//默认值TRUED3D12_DEPTH_WRITE_MASK DepthWriteMask;//默认值D3D12_DEPTH_WRITE_MASK_ALLD3D12_COMPARISON_FUNC Dep…

PC-DMIS2021 偏置线构建坐标系2023

在做偏置直线时,如上图中的例子,选取圆1再选取圆2,然后偏置距离为负数,则做出来的直线,为圆1到圆2的连线顺时针偏置;当选取的顺序改变,或者偏置距离为正数时,所得到的是另一条直线。…

PX4从放弃到精通(二十六):GPS驱动

👉👉👉**无人机硬件,提供全程指导**👈👈👈 前言 PX4 1.12.3 一、主程序 程序位置: void GPS::run() {打开端口,具体的端口由参数GPS_XXX_CONFIG确定 _serial_fd = ::open(_port, O_RDWR | O_NOCTTY);if (_serial_fd < 0) {PX4_ERR("GPS: failed …

FX5U GX WORKS3平台编码器+modbus控制台达变频器 多段速

FX5U GX WORKS3平台编码器modbus控制台达变频器 多段速 案例实现10个位置的定位&#xff0c;可无限扩展 变频器可多段速切换&#xff0c;切换速度可使用io也可以使用modbus与变频器通讯 定位控制模式可设置减速长度&#xff0c;位置到达窗口&#xff0c;可满足编码器普通电机的…

3D打印机调试经验与技巧

入手一台二手极光尔沃Z603S&#xff0c;结果发现问题很多&#xff0c;现在总结一下经验技巧和一些问题解决的方法&#xff1a; 调平 3D打印的最关键前提就是调平了&#xff0c;喷嘴与平台距离太大会造成喷丝是落在平台上&#xff0c;粘度很小&#xff0c;容易移位&#xff1b;距…

VS10X系列振弦采集仪

数据从单独的振弦信号&#xff0c;可以扩展到实现模拟信号的采发。网络在支持原有2G和GPRS的基础上&#xff0c;增加了可支持4G和射频网络。 VS10X振弦采发仪是VS101单通道采集仪的升级替代&#xff0c;在保持原有尺寸和功能的基础上&#xff0c;从对振弦信号的单通道采发升级到…