和keep-alive有关的生命周期有那些?
前言:
我们在开发vue项目的时候,大部分组件是没必要多次渲染的,所以vue提供了一个内置组件keep-alive来缓存组件内部状态,避免重新渲染
keep-alive是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在组件的父组件链中。
生命周期函数:在被keep-alive包含的组件/路由中,会多出两个生命周期的钩子activated 与 deactivated。
activated钩子:在组件第一次渲染时会被调用,之后在每次缓存组件被激活时调用。
activated钩子调用时机:第一次进入缓存路由/组件,在mounted后面,beforeRouteEnter守卫传给next的回调函数之前调用,并且给因为组件被缓存了,再次进入缓存路由、组件时,不会触发这些钩子函数,beforeCreate created beforeMount mounted 都不会触发
deactivated钩子:组件被停用(离开路由)时调用。
dactivated钩子调用时机:使用keep-alive就不会调用beforeDestroy(组件销毁前钩子)和destroyed(组件销毁),因为组件没被销毁,被缓存起来了,这个钩子可以看作是beforeDestroy的替代,如果你缓存了组件,要在组件销毁的的时候做一些事情,可以放在这个钩子里,组件内的离开当前路由钩子beforeRouteLeave => 路由前置守卫 beforeEach =>全局后置钩子afterEach => deactivated 离开缓存组件 => activated 进入缓存组件(如果你进入的也是缓存路由)