vue生命周期就是vue实例从创建到销毁的整个过程我们称之为vue的生命周期,通过vue的生命周期我们可以在不同的阶段进行不同的逻辑操作. vue生命周期常用的钩子函数一共有8个,分别对应的钩子函数为beforeCreate 创建前、 created创建后、beforeMount 挂载前、mounted挂载后、beforeUpdate 更新前、updated更新后、beforeDestory 销毁前、 destoryed销毁后, 页面一开始加载的时候就会触发创建前后和挂载前后的钩子函数, 而更新的钩子函数需要当我们改变data的时候才能触发,销毁的钩子函数必须得当组件进行切换的时候就会进行销毁.在项目开发过程中,我经常使用到的钩子函数有created,我们经常在created进行数据请求,或者获取本地存储的数据,还有一些其他的操作. 除了created还有mounted,我们经常在mounted里面获取dom元素 (有时候也存在获取不到dom元素的情况,这个时候我们一般用$nextTick方法来解决).
每个生命周期钩子具体发生的事情:
⑴beforeCreate(创建前):在此生命周期函数执行的时候,
data 和 methods 中的数据都还没有初始化。
⑵created(创建后):在此生命周期函数中,data 和 methods 都已经被初始化好了,如果
要调用 methods 中的方法,或者操作 data 中的数据,最早只能在 created 中操作。
⑶beforeMount(载入前):在此生命周期函数执行的时候,
模板已经在内存中编译好了,但是尚未挂载到页面中去,此时页面还是旧的。
⑷mounted(载入后):此时页面和内存中都是最新的数据,这个钩子函数是最早可以操作 dom 节点的方法。
⑸beforeUpdate(更新前):此时页面中显示的数据还是旧的,但是 data 中的数据是最新的,
且页面并未和最新的数据同步。
⑹Updated(更新后):此时页面显示数据和最新的 data 数据同步。
⑺beforeDestroy(销毁前):当执行该生命周期函数的时候,实例身上所有的 data,所有的 methods 以及
过滤器…等都处于可用状态,并没有真正执行销毁。
⑻destroyed(销毁后):此时组件以及被完全销毁,实例中的所有的数据、方法、属性、
过滤器…等都已经不可用了。
我们可以将 Vue 组件的生命周期比作一个人从出生到离世的整个过程。让我们假设这个人叫做 VueMan。
创建阶段:
VueMan 正在出生,这个过程是由 Vue 组件的 beforeCreate 钩子表示。在这个阶段,Vue 实例已经被创建,但是尚未完成数据的响应式绑定和事件初始化。
VueMan 出生后,他会执行 created 钩子。在这个阶段,Vue 实例已经完成了数据的响应式绑定,并且可以访问初始化好的数据,但尚未挂载到 DOM 上。
挂载阶段:
- VueMan 需要找一个家庭,这个过程是由 Vue 组件的 beforeMount 钩子表示。在这个阶段,Vue 实例已经准备好将自己的模板渲染成真实的 DOM 元素,但尚未插入到页面中。
- VueMan 找到了一个家庭,并且将自己安置进去,这个过程是由 Vue 组件的 mounted 钩子表示。在这个阶段,Vue 实例已经成功地挂载到了 DOM 上,可以与 DOM 进行交互操作。
更新阶段:
- VueMan 生活在新家中,如果家里的环境发生了变化,他需要做出对应的调整,这个过程是由 Vue 组件的 beforeUpdate 钩子表示。在这个阶段,组件的数据发生了变化,但尚未重新渲染 DOM。
- VueMan 进行了相应的调整,这个过程是由 Vue 组件的 updated 钩子表示。在这个阶段,Vue 实例已经重新渲染了 DOM,并且可以进行下一轮的数据变更和渲染。
销毁阶段:
- VueMan 不再需要这个家庭,需要离开这个家庭,这个过程是由 Vue 组件的 beforeUnmount 钩子表示。在这个阶段,Vue 实例尚未从 DOM 中卸载。
- VueMan 离开了家庭,这个过程是由 Vue 组件的 unmounted 钩子表示。在这个阶段,Vue 实例已经从 DOM 中卸载,并且可以进行垃圾回收。
父组件和子组件生命周期钩子执行顺序是子组件在父组件之前创建、挂载和销毁。也就是说,父组件的生命周期钩子会在子组件的生命周期钩子之前执行。
通过理解组件的生命周期和钩子函数的执行顺序,我们可以更好地掌握 Vue 组件的生命周期,在不同的阶段执行相应的操作和逻辑。