浅谈Vue的生命周期(一)

浅谈Vue的生命周期(一)

在谈vue的生命周期之前,你能正视以下几个问题吗?

  1. vue3来了,vue2会被淘汰吗?
  2. vue3的生命周期和vue2有那些不一样呢?

我们先来看看vue2和vue3生命周期的对比图
在这里插入图片描述

上面的图片很形象的阐述了 Vue 的基本生命周期了。
如果上述的图片不够清晰,请小伙伴们异步到这里查看vue2和vue3基本生命周期对比图

关于vue2的生命周期的解答

这一部分我也是从官网总结的一部分,大家也可以去官网查看更加详细的解答
vue生命周期
vue-router 组件内的守卫

beforeCreate:在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。

created:在实例已经创建完成之后被调用。实例已完成以下的配置:数据观测(data observer),属性和方法的运算,event事件回调。挂载阶段尚未开始,$el 属性不可见。

beforeMount:在挂载开始之前被调用。相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。注意此时还没有挂载html到页面上。

mounted:在el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。此时模板中的html渲染到了html页面中,此时一般可以做一些Ajax操作。注意mounted只会执行一次。

beforeUpdate:在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程。

updated:在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。

activated:被 keep-alive 缓存的组件激活时调用。

deactivated:被 keep-alive 缓存的组件停用时调用。

beforeDestroy:在实例销毁之前调用。实例仍然完全可用。

destroyed:在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。

beforeRouteEnter:在渲染该组件的对应路由被 confirm 前调用。不能获取组件实例 this,因为当守卫执行前,组件实例还没被创建

beforeRouteUpdate:在当前路由改变,但是该组件被复用时调用。举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。可以访问组件实例 this

beforeRouteLeave:导航离开该组件的对应路由时调用。可以访问组件实例 this

如果对上面的Vue生命周期了解的小伙伴,此时此刻,有几个问题,你看看是否能回答出来?

面试问题(待完善)
假设现在我们有A、B两个页面,均无缓存的、配置路由的情况下

初始进入A页面:beforeRouteEnter->beforeCreate->created->beforeMount->mounted
A->B:A[beforeRouteLeave]->B[beforeRouteEnter]->B[beforeCreate]->B[created]->B[beforeMount]->A[beforeDestroy]->A[destroyed]->B[mounted]
B->A:B[beforeRouteLeave]->A[beforeRouteEnter]->A[beforeCreate]->A[created]->A[beforeMount]->B[beforeDestroy]->B[destroyed]->A[mounted]

假设现在我们有A、B两个页面,均缓存的、配置路由的情况下

初始进入A页面:beforeRouteEnter->beforeCreate->created->beforeMount->mounted->activated
A->B:A[beforeRouteLeave]->B[beforeRouteEnter]->B[beforeCreate]->B[created]->B[beforeMount]->A[deactivated]->B[mounted]->B[activated]
B->A:B[beforeRouteLeave]->A[beforeRouteEnter]->B[deactivated]-A[activated]

原创不易,转载请标名出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值