浅谈Vue之生命周期
目录
- 生命周期
- 创建阶段
- 运行阶段
- 销毁阶段
- 常用的生命周期函数
生命周期
概念:生命周期,就似乎人的一生,出生下来,由哺乳期到孩童,慢慢成长到青年,中年,老年,最后落叶归根,化为尘埃! 而Vue实例也是存在一个生命周期,从创建前,创建后,挂载前,挂载后,(按需更新前,更新后),最后销毁前,销毁后,化为虚无!也就是vue实例走向生命的尽头!
官网: 链接: link
Vue实例的阶段:主要分为3个阶段,创建实例,使用实例,销毁实例
在这些阶段之间的处理函数,称之为生命周期函数(钩子函数)!
创建阶段
new Vue() 00=> init(Event) 01=> init(injections注射) 02=> Has “el” options
- 在00,01这个阶段之中,data数据和mthods中方法是还没初始化好
01这边伴随着一个生命周期函数 => beforeCreate()
- 在02这个阶段之中,data数据和methods中的方式以及注入到vue实例对象之内,因此可以访问!
02这边伴随着一个 created()函数
- 在00,01这个阶段之中,data数据和mthods中方法是还没初始化好
结论:需要使用data和methods等中的方法或者数据,最早只能在created生命周期!
Has “el” options => Compile els outerHTML as template 这一个阶段
- 主要是Vue正在编译页面模板,这个阶段结束后,在浏览器内存之中有着页面模板,但这只是在浏览器内存之中,没有渲染到页面之上,因此页面是空白的!
当创建好页面模板,存在于内存的时候,那么立即执行 beforeMount钩子函数(mount (挂载)) => 这时候html尚未挂载在页面之上!
- 结论 : beforeMount钩子函数中的页面上的DOM元素还是原始的插值表达式 {{}}
Create vm($el) and replace “el” with it => 这是创建一个vm实例中所需要挂载的html代码(视图) 并且把之前的插值表达式代码替换掉!
这个执行结束后,就进入到mounted(已挂载) => 已挂载钩子函数
- 结论:想要得到把数据渲染到页面之上,最早是在mounted这个钩子函数之中!
- Create vm($el) and replace “el” with it => Mounted
在两者之间会触发这个钩子函数:mounted => 已挂载,也就是说vue实例对象中的html代码已经挂载在页面上了,页面不再是插值表达式!
- 结论:既然页面挂载好了,那么就可以操作页面中的DOM元素了,因此使用第三方插件的时候,最好是在这边使用即可!
注意点:当mounted钩子函数执行完毕后,也就是代表着Vue的整个创建阶段结束,页面已经挂载了视图,显示了数据! 进入到运行Vue实例阶段
注意点2:创建阶段,一个vm实例一生只执行一次!
运行阶段
运行阶段的流程1:
- 01:先拿到data数据
- 02:data数据 结合el所挂载的元素 在内存之中形成一个渲染好的DOM树 因此渲染的DOM树只是存储在内存之中,还未渲染到页面上
- 所谓DOM树:就是html 分支到head和body 然后head和body又有着分支,仿佛一个大树从主枝干开支散花!
- 03:把 渲染好的DOM 结合el 所挂载的容器,渲染到页面之上!
结论:运行阶段,就是根据最新的数据,更新页面!
运行阶段的流程之钩子函数:
- 01: Mounted =>(when data changes) 1=> DOM re-render and patch (patch - 挂载!)
- 1触发 beforeUpdate 钩子函数(更新数据前)
- 这个钩子函数的特点:就是拿到的页面中的数据是旧的,但是实际上data中的数据已经更新,也就是说,数据和页面不同步,需要后面执行,先拿到最新数据,然后根据el挂载 渲染最新的页面!
- 02: DOM re-render and patch 2=> Mounted
- 2触发 updated(更新后钩子函数) 拿到最新的data,根据el挂载的元素,渲染出最新的页面
- 结论:页面和data是同步的!
注意点:在运行阶段,一个vm实例一生,按需执行0次到多次
销毁阶段
- 01:Mounted => when vm.$destroy() is called 1=> Teardown Watchers 。。。 (销毁实例过程!)
- 1所触发的钩子函数 beforeDestroy(销毁前钩子函数) => 这时候vm实例还是可以正常使用的,还没开始销毁这个实例!
- 02:Teardown Watchers 。。。 (销毁实例过程!) => Destroy 2=>
- 2所触发的钩子函数 destroyed(以销毁钩子函数) => 这时候cm实例已经被销毁了,不能在使用vm实例了!
注意点:销毁阶段,一个vm实例一生只执行1次!
常用的生命周期函数
- :created => 创建后 Vue实例已经初始化了,可以操作data或者methods中的数据了或者方法!
- :mounted => 挂载后 Vue实例已经把模板挂载到页面了,这时候是真正的页面,可以操作DOM元素了,第三方插件也是在这边初始化使用的!
vue第一次页面加载会触发哪几个钩子函数?
beforeCreate、created、beforeMount、mounted
以上是 浅谈Vue之生命周期 的全部内容, 来源链接: utcz.com/z/375917.html