Vue父子组件的生命周期传递顺序

回顾生命周期

视图阶段

1.beforeCreate实例未生成,访问不到this,一般用于设置titlekeywords等;

也可以用于路由权限控制拦截;

2.create;组件实例生成,处于未挂载阶段;组件首次访问datamethods等;一般用于数据初始化,ajax请求;

3.Beforemount template模板的编译,从而形成相应的render函数在;组件挂载前;这时实例依然未挂载,访问不到dom中的data

4.mounted template模板已经真实的挂载到了页面中,用户已经可以看到渲染好的页面了

数据更新阶段

5. beforeUpdate 页面中的显示的数据,还是旧的,此时 data 数据是最新的,页面尚未和最新的数据保持同步

6. updated由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。

销毁阶段

7. beforeDestroy实例销毁之前调用。在这一步,实例仍然完全可用

8.destroyed:组件的数据绑定、监听...都去掉了,只剩下dom空壳

特殊钩子: activated deactivated--- keep-alive包含的组件

keep-alive包含的组件/路由中,会多出两个生命周期的钩子:activated deactivated

activated调用时机:

activated在组件第一次渲染时会被调用,之后在每次缓存组件被激活时调用。

第一次进入缓存路由/组件,在mounted后面,beforeRouteEnter守卫传给 next 的回调函数之前调用:

beforeMount=> 如果你是从别的路由/组件进来(组件销毁destroyed/或离开缓存deactivated)=>mounted=> activated 进入缓存组件 => 执行 beforeRouteEnter回调

再次进入缓存路由/组件时,不会触发这些钩子:// beforeCreate created beforeMount mounted 都不会触发。

Deactivated调用时机:

组件被停用(离开路由)时调用
使用了keep-alive就不会调用beforeDestroydestroyed,因为组件没被销毁,被缓存起来了。

组件内的离开当前路由钩子beforeRouteLeave => 路由前置守卫 beforeEach =>全局后置钩子afterEach => deactivated 离开缓存组件 

问题1

结论:1.父子组件加载渲染过程的顺序ècreated->created->mounted->mounted

     2.父组件在mounted中的赋值操作,子组件在createdmounted中拿不到

问题2

结论

1.父子组件的执行顺序beforeUpdate->beforeUpdate->updated->updated

2.子组件中用beforeupdata周期接受数据更为保险

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值