vue的生命周期及与其子组件生命周期执行顺序

1、vue的生命周期图

在这里插入图片描述

生命周期钩子

vue生命周期总共分为8个阶段: 创建前/后,载入前/后,更新前/后, 销毁前/后。

创建前/后:

beforeCreate(创建前):vue实例的挂载元素$el和数据对象 data都是undefined, 还未初始化
created (创建后) :实例创建完成后,完成了 data数据初始化, 但是el还未初始化。
载入前/后
beforeMount (载入前): vue实例的$el和data都初始化了, 相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。注意此时还没有挂载html到页面上。
mounted (载入后) :在el 被新创建的 vm.$el替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html页面中。

更新前/后

beforeUpdate (更新前): 在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程
updated (更新后) :在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。

销毁前/后

beforeDestroy (销毁前) :在实例销毁之前调用。实例仍然完全可用。
destroyed (销毁后) :在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。

当组件被keep-alive包裹时(缓存)时,会多出activated和deactivated的两个生命周钩子函数。

activated 组件激活时调用。
deactivated 组件停用时调用。

2.子组件的beforeCreate、Created、beforeMount、Mounted阶段

在父组件执行beforeMount阶段后,进入子组件的beforeCreate、Created、beforeMount阶段,这些阶段和父组件类似,按下不表。beforeMount阶段后,执行的是Mounted阶段,该阶段时子组件已经挂载到父组件上,并且父组件随之挂载到页面中。

由下图可以知道,在beforeMount阶段之后、Mounted阶段之前,数据已经被加载到视图上了,即$el元素被挂载到页面时触发了视图的更新

在这里插入图片描述

3.组件的activated阶段

我们发现在组件全部挂载到页面之后被触发。这是因为组件被 包裹,随$el的挂载被触发。如果组件没有被包裹,那么该阶段将不会被触发。
在这里插入图片描述

4.beforeDestroy和destroyed钩子函数间的生命周期

现在我们对Vue实例进行销毁,调用app.$destroy()方法即可将其销毁,控制台测试如下:
在这里插入图片描述
我们发现实例依然存在,但是此时变化已经发生在了其他地方。

beforeDestroy钩子函数在实例销毁之前调用。在这一步,实例仍然完全可用。

destroyed钩子函数在Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁(也就是说子组件也会触发相应的函数)。这里的销毁并不指代’抹去’,而是表示’解绑’。

销毁时beforeDestory函数的传递顺序为由父到子,destory的传递顺序为由子到父。

5.总结

1.加载渲染过程

父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted

2.子组件更新过程

父beforeUpdate->子beforeUpdate->子updated->父updated

3.销毁过程

父beforeDestroy->子beforeDestroy->子destroyed->父destroyed
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue生命周期函数指的是在组件实例化、渲染、更新和销毁等不同阶段执行的一些特定函数。下面是 Vue 组件生命周期函数及其执行顺序: 1. beforeCreate:在实例创建之前被调用。此时组件的数据和方法都还未初始化。 2. created:在实例创建完成之后被调用。此时组件的数据已经初始化,但 DOM 还未渲染。 3. beforeMount:在组件挂载到 DOM 之前被调用。此时模板已经编译完成,但还未挂载到页面中。 4. mounted:在组件挂载到 DOM 后被调用。此时组件已经被渲染并插入到页面中,可以进行 DOM 操作。 5. beforeUpdate:在数据更新之前被调用。此时组件还未重新渲染,但数据已经更新。 6. updated:在数据更新之后被调用。此时组件已经重新渲染,可以进行 DOM 操作。 7. beforeDestroy:在组件销毁之前被调用。此时组件还存在,可以进行一些清理工作。 8. destroyed:在组件销毁之后被调用。此时组件已经从 DOM 中移除,事件监听和定时器等资源都已经被销毁。 对于父组件,它们的生命周期函数的执行顺序如下: 1. 父组件的 beforeCreate 和 created 钩函数执行。 2. 组件的 beforeCreate 和 created 钩函数执行。 3. 组件的 beforeMount 钩函数执行。 4. 组件的 mounted 钩函数执行。 5. 父组件的 beforeMount 钩函数执行。 6. 父组件的 mounted 钩函数执行。 7. 数据更新时,先执行组件的 beforeUpdate 钩函数,然后执行组件的 beforeUpdate 钩函数,再执行组件的 updated 钩函数,最后执行组件的 updated 钩函数。 8. 组件销毁时,先执行组件的 beforeDestroy 钩函数,然后执行组件的 beforeDestroy 钩函数,最后执行组件的 destroyed 钩函数,再执行组件的 destroyed 钩函数。 这是 Vue 组件生命周期函数的一般执行顺序,但在实际开发中可能会有特殊情况,需要根据具体需求来使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值