图文并茂详解vue生命周期

Vue是一个构造函数;当执行这个构造函数时,数据监听、编译模板,实例挂载真实的DOM,数据更新DOM更新;在这个过程中,会默认调用一些函数执行,这些函数就是vue生命周期的钩子函数;

在实例生成以及后期的数据中,有8个钩子函数
beforeCreate :在这个钩子函数之前初始化一些事件和vue的生命周期;
1).不能获取vue中data的数据;
2). 如:document.getElementsByTagName;不能操作DOM;
created:可以获取data中的数据;但是不能操作DOM; 一般用于获取数据;
beforeMount :挂载之前,在这个钩子函数之前,判断是否有el,是否有template;
mounted:挂载之后;把vue实例生成虚拟的DOM挂载真实的DOM上; 可以获取最终的DOM元素;
beforeUpdate:数据更新之前,虚拟DOM通过DOM-diff算法进行对比,并且重新渲染和打补丁;
updated:数据更新完成
beforeDestroy:销毁之前
destroyed:销毁之后: 销毁观察者、子组件、事件的监听者;

createdbeforeMount 在挂载真实的DOM之前执行,可以用来更改数据,减少性能的开销

在vue实例生成过程中,先执行前四个钩子函数(beforeCreatecreatedbeforeMountmounted),在销毁的时候执行后两个函数(beforeDestroydestroyed),有数据更新执行更新函数( beforeUpdateupdated

话不多说,先放图

在这里插入图片描述

Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、销毁等一系列过程,我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程,就是生命周期。

每一个组件或者实例都会经历一个完整的生命周期,总共分为三个阶段:
初始化运行中销毁

(1)、实例、组件通过new Vue() 创建出来之后会初始化事件和生命周期,然后就会执行beforeCreate钩子函数,这个时候,数据还没有挂载呢,只是一个空壳,无法访问到数据和真实的dom,一般不做操作

(2)、挂载数据,绑定事件等等,然后执行created函数,这个时候已经可以使用到数据,也可以更改数据,在这里更改数据不会触发updated函数,在这里可以在渲染前倒数第二次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取

(3)、接下来开始找实例或者组件对应的模板,编译模板为虚拟dom放入到render函数中准备渲染,然后执行beforeMount钩子函数,在这个函数中虚拟dom已经创建完成,马上就要渲染,在这里也可以更改数据,不会触发updated,在这里可以在渲染前最后一次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取

(4)、接下来开始render,渲染出真实dom,然后执行mounted钩子函数,此时,组件已经出现在页面中,数据、真实dom都已经处理好了,事件都已经挂载好了,可以在这里操作真实dom等事情…

(5)、当组件或实例的数据更改之后,会立即执行beforeUpdate,然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染,一般不做什么事儿

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

(7)、当经过某种途径调用$destroy方法后,立即执行beforeDestroy,一般在这里做一些善后工作,例如清除计时器、清除非指令绑定的事件等等

(8)、组件的数据绑定、监听…去掉后只剩下dom空壳,这个时候,执行destroyed,在这里做善后工作也可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值