Vue2 模版编译及生命周期钩子 总结归纳

一. 在beforeCreate生命周期钩子被调用之前,其实还有两个阶段:
(1) 编译阶段。
如果使用了构建步骤,例如使用了单文件组件【.vue文件】,则会在此阶段进行:
 对模板进行解析和编译,并生成渲染函数。编译过程包括 将模板转换为虚拟DOM、解析指令和表达式等,生成具有响应式能力的render函数等工作。这个阶段会处理组件的模板和定义,生成组件的描述对象。

(2) new Vue()【组件实例化阶段的开始】
 调用了new Vue()后,会根据组件的描述对象,创建对应的组件实例,并初始化一些生命周期钩子和事件。

二. Vue2生命周期钩子调用顺序简述如下:
(1) beforeCreate()
调用时机:
  组件实例创建之后,进行初始化之前调用。

当调用此生命周期钩子时:
    组件实例还未对选项进行处理,data 和 methods还不能访问。

当调用此生命周期钩子后:
    会对组件选项进行处理,例如进行数据响应式注入、创建计算属性。

(2) created()
调用时机:
  组件实例已经初始化完成【已经完成对选项的处理】。
        
当调用此生命周期钩子时:
    组件实例已经初始化完成【已经完成对选项的处理】,意味着 组件 数据侦听【data里的变量定义为了响应式变量】、计算属性【computed】、方法【methods】、事件/侦听器的回调函数【watch / event listeners】 已经被配置完毕,此时可以访问组件实例的data 和 methods。
    此时挂载阶段还没有开始,模板还没有被渲染成HTML,vm.$el还不可用。

当调用此生命周期钩子后:
    会判断是否有挂载目标【即是否有el选项】,
    如果有挂载目标,则会进一步判断组件是否有template选项;
    如果没有挂载目标,则会在给组件实例指定挂载目标【即vm.$mount(el)被触发】后再判断组件是否有template选项。

在判断组件是否有template选项时:
    如果有template选项,则会将template选项里的内容编译成渲染函数;
    如果没有template选项,则会将挂载的dom节点的outerHTML【即包含该元素自身标签的完整HTML字符串】当作template,并编译成渲染函数,这意味着Vue会解析挂载元素的标记和内容,并根据其创建相应的DOM元素结构。这种方式使得Vue可以直接使用已有的HTML结构作为初始模板而无需额外定义。

注意:
    在单文件组件中,created()生命周期钩子之后不会再做与 挂载目标元素 或 模板选项 相关的判断,因为在使用单文件组件【.vue文件】时,Vue的编译过程会提前处理模板选项,并将其编译为渲染函数。
    
应用场景:
  将子组件里获取下拉框列表里的数据请求放到父组件的created方法里异步执行,然后将结果传给子组件,这样可以进一步缩短展示子组件时不必要的延迟时间,并进一步避免一些因为过长的延迟时间导致的问题。

(3) beforeMount()
调用时机:
  组件挂载到DOM 开始之前 调用。

当调用此生命周期钩子时:
  组件实例 已经与 模板 或 挂载目标元素 关联,并可执行一些逻辑操作。

当调用此生命周期钩子后:
  会首次调用渲染函数生成虚拟DOM【VNode】,并进行首次渲染【用虚拟DOM树替换容器的真实DOM树(将el用vm.$el替换掉)】。
  当组件挂载到了DOM之后,就会调用mounted生命周期钩子。

(4) mounted()
调用时机:
  el 已被新创建的 vm.$el 替换掉。

当调用此生命周期钩子时:
  组件模板已经被渲染成HTML并且挂载到了页面上,此时响应式数据 和 视图 已经完成了双向绑定。

当调用此生命周期钩子后:
  如果响应式数据发生变化,就会调用beforeUpdate生命周期钩子。
    
注意:
  mounted 不会保证所有的子组件也都被挂载完成。如果希望等到整个视图都渲染完毕再执行某些操作,可以在 mounted 内部使用 vm.$nextTick:

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

(5) beforeUpdate()
调用时机:
  在响应式数据发生变化之后,虚拟DOM重新渲染之前调用。

当调用此生命周期钩子时:
  响应式数据已经发生了变化,但虚拟DOM还没有立即更新。这是因为当响应式数据发生变化时,Vue会调度一个异步的更新过程,在这个更新过程中,Vue会对所有发生变化的组件进行批量的更新操作【将多个更新操作合并为一次更新】,而不是立即更新每个组件的虚拟DOM,这样做可以避免频繁地更新真实DOM,从而提高性能。

当调用此生命周期钩子后:
  会采用diff算法对比VNode 和 真实DOM 的差异,并将虚拟DOM中变化的部分 更新到真实dom上,使页面显示与最新的VNode保持一致。

  完成更新后,就会调用updated()生命周期钩子。
    
应用场景:
  获取到更新前的状态,在 现有DOM 将要被更新之前访问它,比如移除手动添加的事件监听器。
    
注意:
  此时更改响应式数据将不会触发新一轮的更新,因为已经进入了更新阶段。

(6) updated()
调用时机:
  组件DOM树已更新。

当调用此生命周期钩子时:
  组件 DOM 已经更新,所以此时可以执行依赖于 DOM 的操作。

当调用此生命周期钩子后:
  如果vm.$destroy()方法被触发调用,就会调用beforeDestroy()方法。
    
注意:
  在大多数情况下,应该避免在此期间更改状态。如果要相应状态改变,通常最好使用计算属性或 watcher 取而代之。
    
  updated 不会保证所有的子组件也都被重新渲染完毕。如果希望等到整个视图都渲染完毕,可以在 updated 里使用 vm.$nextTick:

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

(7) beforeDestroy()
调用时机:
  组件即将被销毁。

当调用此生命周期钩子时:
  组件实例仍然完全可用,还可以访问data和methods。

当调用此生命周期钩子后:
  完全销毁该组件实例。清理它与其它实例的连接,卸载 该组件及该组件的子组件,解绑这些组件 绑定的 侦听器【watchers】、 全部指令 及 事件监听器【event listeners】。

  完成了卸载后,就会调用destroyed()生命周期钩子。

(8) destroyed()
调用时机:
  组件及其子组件 实例 都已被销毁。

当调用此生命周期钩子时:
  该组件实例及其子组件实例 已经被销毁,相关的侦听器、指令和 事件监听器已经被移除。

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

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

相关文章

轻量封装WebGPU渲染系统示例<41>- 前向渲染的雾(Fog)效果(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/FogTest.ts 当前示例运行效果: 此示例基于此渲染系统实现,当前示例TypeScript源码如下: export class FogTest {private mRscene new Rend…

优化你的计算机性能:如何根据 CPU 占用率决定硬件升级

优化你的计算机性能:如何根据 CPU 占用率决定硬件升级 一、引言二、CPU 占用率的意义与影响三、监测和评估 CPU 占用率四、判断硬件升级需求的依据五、硬件升级方案和建议六、总结 一、引言 计算机性能优化是提升计算机系统整体效能的过程,它对于用户和…

React立即更新DOM

正常情况下,react会等待set完毕后再进行页面渲染,所以在set时无法拿到更新后的dom import { useRef, useState } from "react"export default () > {const div useRef(null)const [count, setCount] useState(0)const btnClick () >…

各大期刊网址

AAAL: http://dblp.uni-trier.de/db/conf/aaai/ CVPR: http://dblp.uni-trier.de/db/conf/cvpr/ NeurlPS:http://dblp.uni-trier.de/db/conf/nips/ ICCV: http://dblp.uni-trier.de/db/conf/iccv/ IJCAL: http://dblp.uni-trier.de/db/conf/ijcal/ 并非原创引…

微机原理——定时器8253(8254)学习2应用与设计

目录 简要说明 用户扩展的定时计数器应用举例 1 8254作测量脉冲宽度 2 8254作定时 3 8254作分频 4 8254同时用作计数与定时 硬件设计 ​编辑软件设计 微机系统中定时计数器应用举例 5 计时器设计 硬件设计 软件设计 6 发生器设计 硬件设计 软件设计 简要说明 定…

LinuxBasicsForHackers笔记 --网络分析和管理

使用 ifconfig 分析网络 ifconfig – ifconfig 命令是用于检查活动网络接口并与之交互的最基本工具之一。只需在终端中输入 ifconfig 即可使用它来查询当前活动的网络连接。命令输出的顶部是第一个检测到的接口的名称。第二行包含当前分配给该网络接口的 IP 地址的信息&#x…

网上商城、宠物商城源码(Java)

javaWebjsp网上书城以及宠物商城源码,功能有购物车、收藏以及下单等等功能 带后台管理功能 运行示意图:

iOS 自动签名打包,并用脚本上传appstore

背景: 1)测试环境给测试,产品,或者其他业务人员打测试包时,经常存在需要添加设备,不得不重新生成描述文件,手动去更新打包机描述文件配置 2)证书,描述文件过期造成打包失…

STM32-SPI 中断

SPI协议 1.1 SPI总线介绍 SPI接口是Motorola (motorola | Smartphones, Accessories & Smart Home Devices)首先提出的全双工三线/四线同步串行外围接口采用主从模式(Master Slave)架构。 时钟由Master控制,在时钟…

华三知识点总结(完成中)

计算机网络概述 星型拓扑易于维护 在星型拓扑中,某条线路的故障不影响其它线路下的计算机通信 电路交换: 优点 延迟小,透明传输 缺点 固定带宽,网络资源利用率低 分组交换:优点 多路复用,网络资源利用率高 缺点&#x…

垃圾回收与内存泄漏

前端面试大全JavaScript垃圾回收与内存泄漏 🌟经典真题 🌟什么是内存泄露 🌟JavaScript 中的垃圾回收 🌟标记清除 🌟引用计数 🌟真题解答 🌟总结 🌟经典真题 请介绍一下 Jav…

P7 链表 链表头前方插入新节点

目录 前言 01 链表头插入数据 示例代码 02 指定节点前方插入新节点 测试代码 前言 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C》✨✨✨ 🔥 推荐专栏2: 《 Linux C应用编程(概念类)_ChenPi的博客-CSDN博客》✨…

关于数据劫持原理(vue2和vue3)

数据劫持,指的是在访问或者修改对象的某个属性时,通过一段代码拦截这个行为,进行额外的操作或者修改返回结果。 Object.defineProperty const user {username: xiaoming,age: 10 } let username user.username Object.defineProperty(use…

Web前端JS如何获取 Video/Audio 视音频声道(左右声道|多声道)、视音频轨道、音频流数据

写在前面: 根据Web项目开发需求,需要在H5页面中,通过点击视频列表页中的任意视频进入视频详情页,然后根据视频的链接地址,主要是 .mp4 文件格式,在进行播放时实时的显示该视频的音频轨道情况,并…

史上最全低代码平台盘点!三分钟盘点2023年顶尖二十个低代码平台!

史上最全低代码平台盘点!三分钟盘点2023年顶尖二十个低代码平台! 什么是低代码平台?2023年顶尖二十大低代码平台,哪个值得一试?低代码平台应该如何选择?本篇,我们将为大家盘点顶尖的十大低代码平…

分享一个简单的基于C语言嵌入式GUI界面切换代码

目录 前言 一、数据类型 二、页面调度 三、页面显示 四、视频展示 前言 最近在用LVGL写一个简单的UI界面,需要进行几个页面的切换,所以就自己写了一个简单页面切换代码,方便进行页面切换,同时使UI代码结构更加清晰。这个结构…

非常好的简历精选7篇

想要打造一份令人眼前一亮的简历,赢得招聘方的青睐?参考这7篇精选的“非常好的简历”案例!无论是应届毕业生还是职场人士,都能从中借鉴灵感,提升简历质量。让求职之路更加顺畅,轻松斩获心仪职位&#xff01…

【java毕业设计源码】基于SSM框架的在线智能题库管理系统设计与实现

该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍: 二、文档学习资料: 三、模块截图: 四、开发技术与运行环境: 五、代码展示: 六、数据库表截图&#xff1a…

ABAP MODIFY 如何使用?有哪些细节需要注意?

MOIDFY 描述 在ABAP中的MODIFY是一个关键字,它可用于更新内表的数据。也可以用于更新数据库表的数据。这在SAP系统的编程中非常有用。 如何使用 MODIFY可以有两种形式:MODIFY TABLE和MODIFY LINE。 1. MODIFY TABLE:(用于修改数据库表、透…

智能优化算法应用:基于入侵杂草算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于入侵杂草算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于入侵杂草算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.入侵杂草算法4.实验参数设定5.算法结果6.参考…