vue中keep-alive的使用及说明

 更新时间:2025年05月15日 10:09:40   作者:爱编程的小学究  
这篇文章主要介绍了vue中keep-alive的使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

原理

我们知道vue是通过vnode实现保存节点的,而keep-alive本身也是通过保存vnode来实现缓存的,而不是直接存储DOM结构。其实就是将需要缓存的VNode节点保存在this.cache中,在render时,如果VNode的name符合在缓存条件(可以用include以及exclude控制),则会从this.cache中取出之前缓存的VNode实例进行渲染

作用

keep-alive组件是vue2.0提供的一个缓存组件,在组件切换过程中把切换出去的组件保留在内存中,防止重复渲染DOM,减少加载时间及性能消耗,提高用户体验性

效果

keep-alive组件,只要将子组件嵌套在这里面就可以实现组件的缓存,当页面返回时数据不会丢失,实现了我们常见的历史页面不刷新的效果

参数Props

  • include - 类型字符串、数组以及正则表达式,只有匹配的组件会被缓存
  • exclude - 类型字符串、数组以及正则表达式,匹配的组件不会被缓存
  • max - 类型字符或者数字,可以控制缓存组件的个数,缓存组件的最大值
// 只缓存组件name为a或者b的组件
<keep-alive include="a,b"> 
  <component />
</keep-alive>
​
// 组件name为c的组件不缓存(可以保留它的状态或避免重新渲染)
<keep-alive exclude="c"> 
  <component />
</keep-alive>
​
// 如果同时使用include,exclude,那么exclude优先于include, 下面的例子只缓存a组件
<keep-alive include="a,b" exclude="b"> 
  <component />
</keep-alive>
​
// 如果缓存的组件超过了max设定的值5,那么将删除第一个缓存的组件
<keep-alive exclude="c" max="5"> 
  <component />
</keep-alive>

生命周期的变化

1.activated

  • 在 keep-alive 组件激活时调用
  • 该钩子函数在服务器端渲染期间不被调用
  • 使用 keep-alive 会将数据保留在内存中,如果要在每次进入页面的时候获取最新的数据,需要在 activated 阶段获取数据,承担原来 created 钩子函数中获取数据的任务。
activated(){
    /** 
     * 缓存的组件点击时调用
    */
  },

2.deactivated

  • 在 keep-alive 组件停用时调用
  • 该钩子函数在服务器端渲染期间不被调用
  • 被包含在 keep-alive 中创建的组件,会多出两个生命周期的钩子: activated 与 deactivated
deactivated(){
    /** 
     * 缓存的组件点击时调用
    */
  },

小知识点:

1、同时使用include,exclude,那么exclude优先于include

2、缓存的组件超过了max设定的值5,那么将删除第一个缓存的组件

3、keep-alive 不会在函数式组件中正常工作,因为它们没有缓存实例

4、keep-alive 先匹配被包含组件的 name 字段,如果 name 不可用,则匹配当前组件 components 配置中的注册名称

5、只有组件被 keep-alive 包裹时,这两个生命周期函数才会被调用,如果作为正常组件使用,是不会被调用的,以及在 2.1.0 版本之后,包含在 keep-alive 中,但符合 exclude ,不会调用activated和 deactivated这两个函数钩子!另外,在服务端渲染时,此钩子函数也不会被调用

用法

1.与include结合使用

// include 只缓存组件名字为home的组件,其他组件不会缓存,而exclude恰好相反
<keep-alive include="home">
   <router-view />
</keep-alive>

2.结合Router中的meta属性来控制组件缓存

{
      path: '/',
      name: 'home',
      meta:{
        keepAlive:true // 需要缓存
      },
      component: Home,
      children: [
        {
          path: 'goods',
          name: 'goods',
          component: Goods,
          meta: {
        	keepAlive: false // 不需要缓存
      	  }
        }
      ]
    }
<keep-alive>
    <router-view v-if="$route.meta.keepAlive" />
</keep-alive>
<router-view v-if="!$route.meta.keepAlive" />

缓存所有页面:

在app.vue页面里加keep-alive

缓存部分页面:

1、在app.vue页面里加keep-alive,结合keep-alive的include属性

2、结合Router中的meta属性,在app.vue页面里加$route.meta.keepAlive的if判断

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 一文教你如何在Vue项目中使用Emoji表情

    一文教你如何在Vue项目中使用Emoji表情

    这篇文章主要为大家详细介绍了在vue项目中如何使用emoji表情,包括font-awesome图标,v-emoji-picker,vue-emoji等emoji表情库,需要的可以参考下
    2025-03-03
  • vue插件实现v-model功能

    vue插件实现v-model功能

    最近在开发自己的富文本编辑器插件,在开发中遇到了很多问题其中我觉得比较好的问题就是在你定义的插件中实现双向绑定。这篇文章主要介绍了vue插件实现v-model功能,需要的朋友可以参考下
    2018-09-09
  • vue仿携程轮播图效果(滑动轮播,下方高度自适应)

    vue仿携程轮播图效果(滑动轮播,下方高度自适应)

    这篇文章主要介绍了vue仿携程轮播图效果(滑动轮播,下方高度自适应),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Vue.js通过组件处理Icon图标

    Vue.js通过组件处理Icon图标

    这篇文章介绍了Vue.js通过组件处理Icon图标的方法,文中通过示例代码介绍的非常详细。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-11-11
  • vue3.0报错Cannot find module‘worker_threads‘的解决办法

    vue3.0报错Cannot find module‘worker_threads‘的解决办法

    这篇文章介绍了vue3.0报错Cannot find module‘worker_threads‘的解决办法。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-11-11
  • vue实现背景图片铺满整个屏幕(适配所有机型)

    vue实现背景图片铺满整个屏幕(适配所有机型)

    在网页设计中,背景全屏是一种常见的视觉效果,通过正确的CSS样式设置,可以实现背景全屏且内容在固定一屏大小内完全显示,如果内容超出一屏,则可以通过滚动条查看剩余内容,这种设计可以提升用户的浏览体验,使网页看起来更加整洁和专业
    2024-10-10
  • 详解.vue文件解析的实现

    详解.vue文件解析的实现

    这篇文章主要介绍了详解.vue文件解析的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)

    vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)

    本文通过实例代码给大家介绍了vue+axios 前端实现登录拦截的方法,主要通过路由拦截和http拦截,具体实例代码大家跟随小编一起通过本文学习吧
    2018-10-10
  • vue中如何实现变量和字符串拼接

    vue中如何实现变量和字符串拼接

    这篇文章主要介绍了vue中如何实现变量和字符串拼接,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 详解Vue中数据可视化词云展示与词云的生成

    详解Vue中数据可视化词云展示与词云的生成

    数据可视化是现代Web应用程序中的一个重要组成部分,词云是一种非常流行的数据可视化形式,可以用来展示文本数据中的主题和关键字,本文我们将介绍如何在Vue中使用词云库进行数据可视化词云展示和词云生成,需要的可以参考一下
    2023-06-06

最新评论