<keep-alive>是Vue.js中的一个内置组件,它的主要功能是缓存不活动的组件实例,而不是销毁它们。当组件在<keep-alive>包裹下时,它的状态将会被保留,即组件的数据和DOM都不会被销毁和重建,从而在组件切换时能够实现高效的复用。
keep-alive怎么使用
keep-alive可以设置以下props属性:
- include - 字符串或正则表达式。只有名称匹配的组件会被缓存
- exclude - 字符串或正则表达式。任何名称匹配的组件都不会被缓存
- max - 数字。最多可以缓存多少组件实例
- include 和exclude 也可以同时使用,但exclude的优先级高于include。这意味着,如果一个组件同时被include和exclude匹配,它将不会被缓存。
设置了 keep-alive 缓存的组件,会多出两个生命周期钩子(activated与deactivated):
- 首次进入组件时:beforeRouteEnter > beforeCreate > created> mounted > activated > ... ... > beforeRouteLeave > deactivated
- 再次进入组件时:beforeRouteEnter >activated > ... ... > beforeRouteLeave > deactivated
以下是一个简单的使用例子:
<keep-alive>
<component :is="view"></component>
</keep-alive>
这里解释一下:is
:is="view" 在 Vue.js 的上下文中是一个特殊的绑定,用于动态地确定要渲染哪个组件。这里的 view 通常是一个变量或数据属性,它包含了要渲染的组件的名称或引用。
具体来说,:is 是一个动态组件的指示符,它告诉 Vue 运行时应该根据绑定的值(在这个例子中是 view)来渲染哪个组件。view 可以是一个组件的注册名称(如果组件是全局注册的),或者是一个组件对象(如果组件是局部注册的)。
当 view 的值改变时,Vue 会销毁当前渲染的组件(如果它存在的话),并创建一个新的组件实例来替换它。
使用keep-alive的例子
<template>
<div>
<button @click="changeComponent">切换组件</button>
<keep-alive>
<component :is="currentComponent"></component>
</keep-alive>
</div>
</template>
<script>
import ComponentA from './ComponentA.vue';
import ComponentB from './ComponentB.vue';
export default {
data() {
return {
currentComponent: 'ComponentA',
components: {
ComponentA,
ComponentB
}
};
},
methods: {
changeComponent() {
this.currentComponent = this.currentComponent === 'ComponentA' ? 'ComponentB' : 'ComponentA';
}
},
components: {
ComponentA,
ComponentB
}
};
</script>