在 Vue 的生命周期中,父组件和子组件的钩子函数的执行顺序类似于js事件的冒泡和捕获顺序
1. 挂载阶段(组件创建并插入 DOM)
当父组件和子组件一起加载时:
- 父组件的
beforeCreate
钩子执行 - 父组件的
created
钩子执行 - 子组件的
beforeCreate
钩子执行 - 子组件的
created
钩子执行 - 子组件的
beforeMount
钩子执行 - 子组件的
mounted
钩子执行 - 父组件的
beforeMount
钩子执行 - 父组件的
mounted
钩子执行
总结挂载顺序:
父组件beforeCreate
→ 父组件created
→ 子组件生命周期 → 父组件继续。
2. 更新阶段(数据更新导致重新渲染)
当父组件的数据发生变化并重新渲染时:
- 父组件的
beforeUpdate
钩子执行 - 子组件的
beforeUpdate
钩子执行 - 子组件的
updated
钩子执行 - 父组件的
updated
钩子执行
总结更新顺序:
父组件beforeUpdate
→ 子组件生命周期 → 父组件继续。
3. 销毁阶段(组件被销毁)
当父组件销毁时,会触发子组件的销毁过程:
- 父组件的
beforeDestroy
钩子执行 - 子组件的
beforeDestroy
钩子执行 - 子组件的
destroyed
钩子执行 - 父组件的
destroyed
钩子执行
总结销毁顺序:
父组件beforeDestroy
→ 子组件生命周期 → 父组件继续。
总结:
-
挂载阶段(类似捕获):
在挂载过程中,父组件的初始化(beforeCreate
和created
)优先执行,子组件的挂载过程(beforeMount
和mounted
)完成后,父组件再继续完成自身的挂载。 -
更新阶段(类似冒泡):
数据更新时,父组件的beforeUpdate
先执行,然后进入子组件的更新阶段(beforeUpdate
和updated
),最后回到父组件的updated
。 -
销毁阶段(类似捕获):
父组件销毁时,子组件的销毁过程(beforeDestroy
和destroyed
)优先完成,最后父组件执行自身的销毁钩子。