Vue生命周期初探

本来想从这就开始写关于vue的模板语法的,但是思前想后,觉得还是应该先学习一下vue的完整生命周期,随便写一下,想到哪儿就写到哪儿。

先写一下页面显示的几个阶段。

1.生成DOM树(包括display:none的节点)。

2.在DOM树的基础上根据节点的属性生成Render树(不包括display:none,head节点,包括visibilty:hidden的节点)

3.在render树的基础上继续渲染颜色,背景色等样式。

每个 Vue 实例在被创建时都要经过一系列的初始化过程。

这个完整的生命周期图片太长了,我们从每一个钩子截图看一下。

1.beforeCreate

beforeCreate

实例或组件通过new Vue() 创建出来之后会初始化事件和生命周期,然后就会执行beforeCreate钩子函数,这个时候,数据还没有挂载,无法访问到数据和真实的dom,我们一般不会在此处进行任何操作。

2.created


created

在执行完成beforeCreate之后,vue会进行初始化事件,进行数据的观测,在这时数据已经和data的属性绑定了,你改变data的属性,同时视图也会随着更新。我们一般在这个钩子里获取数据进行初始化。

这时还没有$el


3.beforeMount

beforeMount

这个阶段发生了很多事情。

首先会判断对象是否有el选项。如果有的话就继续向下编译,如果没有el选项,则停止编译,也就意味着停止了生命周期,直到在该vue实例上调用vm.$mount(el)才继续向下走。

在这个函数中虚拟Dom已经创建完成,马上开始render()

为什么先判断el然后判断template?

vue需要通过el找到对应的outer template

渲染的优先级如下:

render函数选项 > template选项 > outer HTML. 

4.mounted

mounted

在mounted之前,template模板中还是通过{{data}}进行占位的,因为此时还没有挂在真实dom上,还是以JS中的虚拟dom存在的。
接下来开始render(),渲染出真实dom,然后执行mounted钩子函数,此时,组件已经出现在页面中,数据、真实dom都已经处理好了,事件都已经挂载好了,可以在这里操作真实dom。

4. beforeUpdate &updated

beforeUpdate &updated

当vue发现data中的数据发生了改变,会触发对应组件的重新渲染,先后调用beforeUpdateupdated钩子函数。

vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染。

当更新完成后,执行updated,数据已经更改完成,dom也重新render完成,可以操作更新后的虚拟dom。

4.  beforeDestroy  & destroyed


beforeDestroy  & destroyed 

beforeDestroy钩子函数在实例销毁之前调用。在这一步,实例仍然完全可用。我们在这一步一般进行一些清除定时器一类的操作。

destroyed钩子函数在Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 使用Vue在日常开发中会频繁接触和使用生命周期,在官方文档中是这么解释生命周期的: 每个 Vue 实例在被创...
    心_c2a2阅读 2,287评论 1 8
  • 生命周期 在使用vue的过程中,对vue的生命周期的理解是最基础的开始,也许你不需要全部理解,但对其中最主要的几个...
    刀刀小技阅读 1,256评论 1 2
  • 前言 记录平时学到的知识,标题写的大气一点,也算是给自己一点鼓励,希望在技术这条路可以远走越远,路越走越宽~ 文中...
    徐国军_plus阅读 1,675评论 3 28
  • 郑海燕焦点初十 中12坚持分享250天2019.2.16 假期余额不足啦,一个充实而又忙碌的假期,在家人眼中,我像...
    晴岚85阅读 115评论 0 0
  • 分享一本书的演讲提纲 上一周在我们霸气的阅读团伊娜团长的带领下,我们十几个人举办了线下读书分享会,我给大家分享了一...
    黑夜焰火阅读 2,449评论 0 0