第 78 题:Vue 的父组件和子组件生命周期钩子执行顺序是什么?
父组建: beforeCreate -> created -> beforeMount
子组件: -> beforeCreate -> created -> beforeMount -> mounted
父组件: -> mounted
总结:从外到内,再从内到外
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(18)
vue源码哪里可以看到父组件要等待子组件完成之后 才处罚自身装载啊
由于父组件是包裹了子组件, 所以顺序很简单, 无论是创建, 挂载还是更新和卸载, 这些操作的开始都是从父组件进入, 父组件必须等待子组件完成自身的操作后父组件才能完成自己对应的操作, 所以结束是先从子组件完成的.
为什么我在控制台输出的顺序是父组件 mouted 之后 子组件 才 顺序执行生命周期呢 哪位大佬帮孩子解释一下原理呗
04-vue 生命周期进阶
基本流程
加载渲染的过程
父组件挂载完毕肯定是等里面的子组件都挂载完毕后才算父组件挂载完毕了,所以父组件的mounted在最后。
子组件更新过程
子组件更新过程(子组件更新影响到父组件的情况):
父beforeUpdate -> 子beforeUpdate->子updated -> 父updted
子组件更新过程(子组件更新不影响父组件的情况):
子beforeUpdate -> 子updated
父组件更新过程
eactivated函数的触发时间是在视图更新时触发。因为当视图更新时才能知道keep-alive组件被停用了。
父组件更新过程(父组件影响子组件的情况):
父beforeUpdate -> 子beforeUpdate->子updated -> 父updted
父组件更新过程(父组件不影响子组件的情况):
父beforeUpdate -> 父updated
销毁过程
父beforeDestroy->子beforeDestroy->子destroyed->父destroyed
小补充
因为异步组件就没有固定的周期了,如果钩子中有异步函数的话,子组件的mounted是在父组件执行完之后,我一般是在子组件中用selterval判断父组件时候已经有数据,然后再执行方法
您好,为什么我在本地打印出来,是:
父组件beforeMount->父组件mounted->子组件beforeMount->子组件mounted?
但是销毁的时候又是正常的:
父组件beforeDestroy->子组件beforeDestroy->子组件destroyed->父组件destroyed
还有异步组件的情况 没人讨论吗
@habc0807
希望以上回答能解决你的困惑 : )
@luchx 谢谢你的回答,我对2,3不太理解。如果一个页面
app组件-> main组件 ->footer组件-> btn组件
,当btn组件更新的时候,是这样的更新过程吗?footer组件beforeUpdate -> btn组件beforeUpdate -> btn组件updated -> footer组件updated
如果是的话,当footer组件beforeUpdate、updated的时候,main组件和app组件是也会走这样的更新过程吗。
vue的生命周期:
beforeCreate
created
beforeMount
mounted
beforeDestory
destoryed
beforeUpdate
updated
父组件和子组件钩子执行顺序
父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted
父组件挂载完毕肯定是等里面的子组件都挂载完毕后才算父组件挂载完毕了,所以父组件的mounted在最后。
父beforeUpdate -> 子beforeUpdate->子updated -> 父updted
子组件更新过程(子组件更新不影响父组件的情况):
子beforeUpdate -> 子updated
父beforeUpdate -> 子beforeUpdate->子updated -> 父updted
父组件更新过程(父组件不影响子组件的情况):
父beforeUpdate -> 父updated
父beforeDestroy->子beforeDestroy->子destroyed->父destroyed
@zeroone001
1,父组件:beforeDestroy,
2,子组件:beforeDestroy->destroyed,
3,父组件:destroyed
子组件更新,子beforeUpdate->子updated,并不会直接触发父组件钩子
单向数据流呀
你好! 请问具体为什么 这么处理啊?
Note that mounted does not guarantee that all child components have also been mounted. If you want to wait until the entire view has been rendered, you can use vm.$nextTick inside of mounted:
^_^
在vue里面父的mounted并不一定在子mounted之前。这是官方已经明确的。而且在开发中也是需要避免这个问题的。
和事件流好像啊
https://www.cnblogs.com/yuliangbin/p/9348156.html
1.首次加载过程
父beforeCreate -> 父created -> 父beforeMount -> 子beforeCreate -> 子created -> 子beforeMount ->
子mounted -> (子activated) -> 父mounted
2.父组件更新过程
父beforeUpdate -> (子deactivated) -> 父updated
3.子组件更新过程
父beforeUpdate -> 子beforeUpdate -> 子updated -> 父updated
4.销毁过程
父beforeDestroy-> 子beforeDestroy -> 子destroyed -> 父destroyed
父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted
父beforeUpdate->子beforeUpdate->子updated->父updated
父beforeUpdate->父updated
父beforeDestroy->子beforeDestroy->子destroyed->父destroyed