该文章主要是一个记录,会简单的介绍 Vue2.6 中 keep-alive 相关的内容正则表达式
keep-alive 主要是用于 Vue 组件的缓存,也就是当你须要频繁的在多个组件视图中进行切换的时候,你就能够考虑使用 keep-alive;
keep-alive 可让组件保持存活,在二次乃至屡次使用的时候,不须要重复去渲染,也就意味着不会走第二次 生命周期函数;
不过这也意味着,在没有特殊处理的状况下,被缓存的组件显示的数据始终是第一次加载时候的样子。数组
keep-alive 的使用方法很是的简单,只须要使用 <keep-alive></keep-alive>
标签去包裹须要缓存的组件便可。
示例以下:缓存
// 组件缓存
<keep-alive>
<component :is="componentName" />
</keep-alive>
// 路由缓存
<keep-alive>
<router-view />
</keep-alive>
...
复制代码
被 keep-alive 包裹的组件的生命周期是有区别于普通的组件。
被 keep-alive 包裹的组件中,会多出两个生命周期 activated、deactivated
。
第一次进入被 keep-alive 包裹的组件中的时候会依次调用 beforeCreate -> created -> beforeMount -> mounted -> activated
,其后的进入皆只会调用 activated
,由于组件被缓存了,再次进入的时候,就不会走 建立、挂载
的流程了。
被 keep-alive 包裹的组件退出的时候就不会再执行 beforeDestroy、destroyed
了,由于组件不会真正意义上被销毁,相对应的组件退出的时候会执行 deactivated
做为替代。markdown
activated 会在组件进入(再次渲染)的时候被触发函数
deactivated 会在组件离开(停用、移除)的时候被触发spa
在使用中,特别是进行了路由缓存的时候,总归有些组件须要实时刷新不想让它进行缓存的,那么这里咱们就能够用到 include、exclude
去进行匹配。
两种配置能够并行使用(同时使用),须要注意的是 exclude 优先级是大于 include 的。code
那么咱们全部组件都进行缓存的时候,会占用不少的空间,咱们可使用 max
去制定缓存组件的最大数量,当超过最大数量的时候,那么最久远的组件缓存将被释放。component
匹配规则:orm
注意:匿名组件是没法进行匹配的。router
顾名思义,匹配到的 组件 会被缓存, 可使用 字符串(逗号分隔)、正则表达式、数组等方法进行匹配。
示例以下:
// 字符串
<keep-alive include="name1,name2">
<router-view />
</keep-alive>
// 数组
<keep-alive :include="/name1 | name2/">
<router-view />
</keep-alive>
// 数组
<keep-alive :include="['name1', 'name2']">
<router-view />
</keep-alive>
复制代码
顾名思义,匹配到的 组件 不会被缓存, 可使用 字符串(逗号分隔)、正则表达式、数组等方法进行匹配。
示例以下:
// 字符串
<keep-alive exclude="name1,name2">
<router-view />
</keep-alive>
// 数组
<keep-alive :exclude="/name1 | name2/">
<router-view />
</keep-alive>
// 数组
<keep-alive :exclude="['name1', 'name2']">
<router-view />
</keep-alive>
复制代码
可缓存组件的最大数量,须要传入数字,能够是字符型和数值型的数据类型。
示例以下:
// 字符串
<keep-alive max="5">
<router-view />
</keep-alive>
// 数值
<keep-alive :max="5">
<router-view />
</keep-alive>
复制代码
在缓存路由的时候,也能够经过配置 meta
来判断路由是否须要缓存和不缓存 示例以下:
...
{
path: '/keep',
name: 'Keep',
component: Keep,
meta: {
keepAlive: true // 缓存
}
},
{
path: '/alive',
name: 'Alive',
component: Alive,
meta: {
keepAlive: false // 不缓存
}
}
...
复制代码
以上就是 keep-alive 的简述了,若是对您有帮助的话,能够点个👍。