Vue 父子组件钩子的执行顺序是什么

结论先行:

组件的加载顺序是自上而下的,也就是先加载父组件,再递归地加载其所有的子组件。

因此, 先执行父组件 beforeCreate 钩子  =>  父组件 created 钩子  =>  父组件 beforeMount 钩子  =>  子组件 beforeCreate 钩子  =>  子组件 created 钩子  =>  子组件 beforeMount 钩子

而组件渲染顺序是按照深度优先遍历的方式,也就是先渲染最深层的子组件,再依次向上渲染其父组件。 

因此,先执行子组件 mounted 钩子  =>  父组件 mounted 钩子

更新阶段、销毁阶段和渲染顺序相同

父组件 beforeUpdate 钩子  =>  子组件 beforeUpdate 钩子  =>  子组件 updated 钩子  =>  父组件 updated 钩子

 父组件 beforeDestroy 钩子  =>  子组件 beforeDestroy 钩子  =>  子组件 destroyed 钩子  =>  父组件 destroyed 钩子

被 keep-alive 缓存的组件在组件被激活或停用时,执行的生命周期钩子会发生变化。

激活 (activated) 缓存中的组件时,父组件 activated 钩子  =>  子组件 activated 钩子   

 停用 (deactivated) 缓存中的组件时,父组件 deactivated 钩子  =>  子组件 deactivated 钩子

 

具体分析: 

在 Vue 中,父子组件之间的生命周期钩子执行顺序如下:

1、创建和挂载阶段

父组件 beforeCreate 钩子  =>  父组件 created 钩子  =>  父组件 beforeMount 钩子  =>  子组件 beforeCreate 钩子  =>  子组件 created 钩子  =>  子组件 beforeMount 钩子  =>  子组件 mounted 钩子  =>  父组件 mounted 钩子

2、更新阶段

父组件 beforeUpdate 钩子  =>  子组件 beforeUpdate 钩子  =>  子组件 updated 钩子  =>  父组件 updated 钩子

3、销毁阶段

父组件 beforeDestroy 钩子  =>  子组件 beforeDestroy 钩子  =>  子组件 destroyed 钩子  =>  父组件 destroyed 钩子

在这个过程中,子组件的生命周期钩子的执行顺序总是在父组件的生命周期钩子之后。

在 keep-alive 组件中,由于缓存组件会被 keep-alive 管理,因此在组件被激活或停用时,执行的生命周期钩子会发生变化。

4、激活 (activated) 缓存中的组件时:

父组件 activated 钩子  =>  子组件 activated 钩子   

5、停用 (deactivated) 缓存中的组件时:

父组件 deactivated 钩子  =>  子组件 deactivated 钩子

需要注意的是,在 keep-alive 组件中,子组件的 mounted 钩子只会在组件被首次渲染时执行,当组件被缓存并再次激活时,子组件的 mounted 钩子不会再次执行,而是执行 activated 钩子。

同样,当组件被停用时,子组件的 destroyed 钩子不会立即执行,而是等到组件被销毁时才会执行。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值