粗谈Vue的生命周期

在Vue中,我们每new出来一个实例或者每创建一个组件(创建组件的时候Vue的内部帮我们new了)都会到实例或者组件被销毁这一个系列过程叫做生命周期,Vue给整个生命周期提供了一些函数,这些函数会在生命周期里面某一过程(特定的条件、特定的场合)触发,我们也称这些函数为钩子函数!!
Vue的生命周期钩子函数大致分为三个阶段,八个函数!

  1. 初始化阶段(beforeCreate、created、beforeMount、mounted)
  2. 运行阶段(beforeUpdate、updated)
  3. 销毁阶段(beforeDestory、destoryed)

先不说那么多,上个流程图!!简单明了!
粗谈Vue的生命周期
beforeCreate(创建实例前)

这个钩子函数在生命周期初始化的时候立马执行,在这个时候,虚拟DOM树还没有形成,页面也没有挂载(什么是挂载?在Vue中数据和DOM都需要挂载,个人认为挂载的目的是为了生成虚拟DOM树),所以在这个钩子函数里面是获取不到数据了真实的DOM节点,不过个人认为在这个钩子函数里面可以写一些window.onload之类的函数。

created(创建实例后)

这个钩子函数是在创建实例后触发的钩子函数,这个时候内部数据已经挂载了,所以在这个函数里面是能够获取实例里面的数据的,也可以对内部数据进行操作更改,但是真实的DOM节点是获取不了的,个人认为这个钩子函数里面能够写一些ajax请求、axios数据请求之类的函数。

beforeMount(元素挂载前)

这个钩子函数执行,初始化数据完成,代表页面数据挂载完毕,数据挂载完成就代表生成了虚拟DOM树,形成DOM树是为了执行renden()函数-------代表数据和DOM即将被渲染出来了,在这个时候是能够进行双向数据绑定的,不过真是的DOM还未完成挂载,所以在这个时候还是获取不到真是的DOM节点

mounted(元素挂载后)

这个函数是初始化阶段的最后一个钩子函数,执行这个函数执行的时候代表数据已经挂载完成了,真实的DOM节点已经渲染出来了,这个时候还是能够获取真实的DOM节点(这里的真实的DOM是怎么来的呢?前面提到过一个render函数,成形的虚拟DOM树通过Vue的内部机制render()函数渲染出来到html页面,也就是说render()函数在mounted钩子函数的前面执行完毕才带mounted执行的)

beforeUpdate(实例更新前)

触发这个钩子函数的前提我认为有两个

  1. 数据和DOM挂载完成
  2. 当组件或者实例的data数据发生改变的时候

这两个条件必须要都满足不然不能够触发这个函数,当这个函数触发了就会先获取数据更新前的数据,形成一个虚拟DOM树(旧的虚拟DOM树)

updated(实例更新后)
这个钩子函数执行是代表数据渲染完毕,真实的DOM已经在页面中渲染完成了。过程这样的-------数据更改后形成了一个新的虚拟DOM树,新的虚拟DOM树与上一周期旧的虚拟DOM树进行(diff)差异对比,对比出来的差异进行真实的DOM渲染。一般在created请求完数据之后,一系列周期下来,直到挂载完成后(mounted钩子函数执行完成后),数据更改执行到这个函数就代表页面数据已经渲染完毕,真实的DOM也已经渲染完毕,在这个函数里面就代表能够拿到真实的DOM节点了!!!!!!

beforeDestory(实例销毁前)

实例或者组件销毁之前触发的函数,这个时候实例还没有销毁,实例任然存在生命周期,任然可以使用

destoryed(实例销毁后)
实例或者组件销毁之后触发的函数,这个时候实例已经完全性的销毁了,实例已经不能用了,这个时候就不存在能够实现双向数据绑定,数据都获取不了,不过一般在这个钩子函数里面放清除定时器的代码,也可以在上一个周期放!!!!!!

总结一下:常用的生命周期钩子函数 created()、update()。