Hi FE !
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
  • V010-vue中的keep-alive介绍下吧

V010-vue中的keep-alive介绍下吧

使用场景:

如果需要频繁切换路由,这个时候就可以考虑用keep-alive了,来达到避免数据的重复请求的目的

作用:

keep-alive用来缓存组件,避免多次加载相应的组件,减少性能消耗。 简单一点来说就是从页面A链接到其他页面后回退到页面A不用在重新执行页面A的created生命周期的代码,只会从缓存中加载之前已经缓存的页面A

几个参数:

Props include - 字符串或正则表达式。只有名称匹配的组件会被缓存。 exclude - 字符串或正则表达式。任何名称匹配的组件都不会被缓存。 max - 数字。最多可以缓存多少组件实例。

一、用法介绍 keep-alive是一个内置组件和类似 keep-alive组件提供了include与exclude两个属性来允许组件有条件地进行缓存,二者都可以用逗号分隔字符串、正则表达式或一个数组来表示 keep-alive提供了两个生命钩子,分别是activated与deactivated。因为keep-alive会将组件保存在内存中,并不会销毁以及重新创建,所以不会重新调用组件的created等方法,需要用activated与deactivated这两个生命钩子来得知当前组件是否处于活动状态。 第一次为调取缓存的加载顺序,开启了keep-alive后,当再次进入(前进或者后退)时,只触发activated,退出时触发deactivated。 beforeCreate->created->beforeMount-> mounted-> activated

如何使用呢?

使用router. meta属性

//router.js文件路由设置
{
    path: '/keep_alive_test',
    component: () => import('@/views/keepAliveTest.vue'),
    meta: {
        title: 'keepAlive测试',
        keepAlive: true//使用(通过路由meta的keepAlive属性决定那个页面使用缓存)
    }
},

//App.vue文件
	<keep-alive :include="'componentA'">
		<router-view v-if="$route.meta.keepAlive"/>
	</keep-alive>
	<router-view v-if="!$route.meta.keepAlive"/>

使用include,exclude属性(不需要设置路由,需要设置组件名字,这里组件名字非路由组件名而是定义组件的名称)

//App.vue文件
<keep-alive :include="pages" exclude="componentB">
	<router-view/>
</keep-alive>
data () {
	return {
		pages: ['componentA', 'componentC']
	}
}

//这里的component组件内容就会被缓存,name为componentA\componentC的组件将会被缓存。name为componentB的组件将不会被缓存。 //!!!!include和exclude的组件名字必须是组件定义的name

注意事项

keep-alive组件使用针对的是页面组件!!!! 使用keep-alive 的组件不会再次触发created钩子函数 使用keep-alive,调用 $destory() 需要谨慎,否则页面不再被缓存 include 和exclude的组件名字必须是组件定义的name,而不是路由里面定义的名字

总结:


用了这个组件后就没有组件就没有created生命周期了。

vue可以使用keep-alive包裹一个动态路由组件,包裹之后,动态组件的状态会被缓存。如果使用动态组件渲染的某个组件使用了created生命周期请求数据,那么下次进入该组件不会再次请求数据。

因为keep-alive之后,所有的动态组件都会被缓存,被缓存之后的组件再次进入就不会执行created,如果想要每次进入数据都有更新或是更新操作,就应该使用activated生命周期来代替created。

router的生命周期不受keep-alive的影响。

Edit this page
最近更新: 2025/6/27 02:24
Contributors: qdleader
qdleader
本站总访问量 129823次 | 本站访客数 12人