keep-alive:
主要用于保留组件状态
或避免重新渲染
。
比如: 有一个列表页面
和一个 详情页面
,那么用户就会经常执行打开详情=>返回列表=>打开详情
这样的话 列表 和 详情 都是一个频率很高
的页面,那么就可以对列表组件
使用<keep-alive></keep-alive>
进行缓存,这样用户每次返回列表
的时候,都能从缓存中快速渲染
,而不是重新渲染
。
1、属性:
-
include:
字符串或正则表达式。只有匹配的组件会被缓存。 -
exclude:
字符串或正则表达式。任何匹配的组件都不会被缓存。
2、用法:
包裹动态组件
时,会缓存
不活动的组件实例,而不是销毁
它们。和 <transition>
相似,<keep-alive>
是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件链中。
<!-- 基本 -->
<keep-alive>
<component :is="view"></component>
</keep-alive>
<!-- 多个条件判断的子组件 -->
<keep-alive>
<comp-a v-if="a > 1"></comp-a>
<comp-b v-else></comp-b>
</keep-alive>
<!-- 和 `<transition>` 一起使用 -->
<transition>
<keep-alive>
<component :is="view"></component>
</keep-alive>
</transition>
注意:
<keep-alive>
是用在其一个直属的子组件
被开关的情形。如果你在其中有 v-for
则不会工作。如果有上述的多个条件性的子元素
,<keep-alive>
要求同时只有一个
子元素被渲染。
3、include 和 exclude 属性的使用:
2.1.0 新增
include
和 exclude
属性允许组件有条件地缓存。二者都可以用逗号
分隔字符串、正则表达式
或一个数组
来表示:
<!-- 逗号分隔字符串 -->
<keep-alive include="a,b">
<component :is="view"></component>
</keep-alive>
<!-- 正则表达式 (使用 `v-bind`) -->
<keep-alive :include="/a|b/">
<component :is="view"></component>
</keep-alive>
<!-- 数组 (使用 `v-bind`) -->
<keep-alive :include="['a', 'b']">
<component :is="view"></component>
</keep-alive>
匹配首先检查组件自身的 name 选项
,如果 name 选项不可用,则匹配它的局部注册名称
(父组件 components 选项的键值)。匿名组件不能被匹配。
不会在函数式组件中正常工作,因为它们没有缓存实例。