1、为什么需要缓存组件:
1. 默认情况下,在切换路由时,路由对应的组件会被重新创建或销毁,每次切换的路由都是新创。
1. 如果可以缓存路由组件,将可以提高用户体。
2、keep-alive缓存组件
keep-alive是Vue内置的组件,可以是被包括的组件被缓存,保留组件的状态,避免重新渲染。
router-view组件,如果被包裹在keep-alive里面,所以路径匹配的组件都会被缓存。
这样在每次切换组件时,组件都不会被销毁。
当在home组件中输入1234,切换至About组件时,再切回Home组件,数据依旧缓存着。
3、钩子函数
1. 最初生命周期只有8个钩子函数
2. 如果使用keep-alive组件将会多出两个钩子函数分别为 activated 和 deactivated
3. activated被激活,表示被缓存的组件激活使用,当前处于活跃状态
4. deactivated被冻化,表示当前组件虽然被缓存,但是不是处于活跃状态
注意:在keep-alive中,如果使用到了定时器等操作,需要在deactivated的钩子函数中取清楚定时器,和之前说的在destroyed的钩子函数中清楚不太一样,这种情况下在destroyed钩子函数中清楚定时器是没有任何效果的!
4、keep-alive重要的两个属性
4.1 组件的缓存问题
1. 组件的缓存可以提升用户的体验
比如:登录输入的时候,当切换其他路由再切回来时,还是保留着之前的输入数据。
2. 组件的缓存与ajax发送请求带来的冲突问题
一个组件的数据需要实时跟后台数据同步,如果被keep-alive缓存可能就不会发送ajax请求,这样也就导致不会实时的获取最新的数据
3. keep-alive包裹着的router-view组件位置的所有组件都会被缓存
4. 有的组件不想被缓存就需要keep-alive的重要属性去处理
4.2 keep-alive两个非常重要的属性
1. include字符串或正则表达式,只有匹配的组件会被缓存。
2. exclude字符串或正则表达式,任何匹配成功的组件都不会被缓存,用的比较多
此时 exclude属性将About组件排除在缓存之外了