vue中keepalive怎么理解?

说在前面: keep-alive是vue源码中实现的一个组件, 感兴趣的可以研究源码 https://github.com/vuejs/vue/blob/dev/src/core/components/keep-alive.js

什么是keepalive

我们平时开发中, 总有部分组件没有必要多次init, 我们需要将组件进行持久化,使组件状态维持不变,在下一次展示时, 也不会进行重新init

keepalive音译过来就是保持活着, 所以在vue中我们可以使用keepalive来进行组件缓存

基本使用

  1. // 被keepalive包含的组件会被进行缓存

  2. <keep-alive>

  3.    <component />

  4. </keep-alive>

上面提到被keepalive包含的组件不会被再次init,也就意味着不会重走生命周期函数, 但是平常工作中很多业务场景是希望我们缓存的组件在再次渲染的能做一些事情,vue为keepalive提供了两个额外的hook

  • activated 当keepalive包含的组件再次渲染的时候触发

  • deactivated 当keepalive包含的组件销毁的时候触发

注: 2.1.0 版本后keepalive包含但被exclude排除的组件不会有以上两个hook

参数

keepalive可以接收3个属性做为参数进行匹配对应的组件进行缓存

  • include 包含的组件

  • exclude 排除的组件

  • max 缓存组件的最大值

其中include,exclude可以为字符,数组,以及正则表达式
max 类型为字符或者数字

代码理解

  1. // 只缓存组件name为a或者b的组件

  2. <keep-alive include="a,b">

  3.  <component :is="currentView" />

  4. </keep-alive>

  5. // 组件名为c的组件不缓存

  6. <keep-alive exclude="c">

  7.  <component :is="currentView"/>

  8. </keep-alive>

  9. // 如果同时使用include,exclude,那么exclude优先于include, 下面的例子也就是只缓存a组件

  10. <keep-alive include="a,b" exclude="b">

  11.  <component :is="currentView"/>

  12. </keep-alive>

  13. // 如果缓存的组件超过了max设定的值5,那么将删除第一个缓存的组件

  14. <keep-alive exclude="c" max="5">

  15.  <component :is="currentView"/>

  16. </keep-alive>

配合router使用
  1. <!-- template -->

  2. // 意思就是$router.meta.keepAlive值为真是将组件进行缓存

  3. <keep-alive>

  4.    <router-view v-if="$router.meta.keepAlive"></router-view>

  5. </keep-alive>

  6. <router-view v-if="!$router.meta.keepAlive"></router-view>

  7. //router配置

  8. new Router({

  9.    routes: [

  10.        {

  11.            name: 'a',

  12.            path: '/a',

  13.            component: A,

  14.            meta: {

  15.                keepAlive: true

  16.            }

  17.        },

  18.        {

  19.            name: 'b',

  20.            path: '/b',

  21.            component: B

  22.        }

  23.    ]

  24. })

总结

keepalive是一个抽象组件,缓存vnode,缓存的组件不会被mounted,为此提供activated 和 deactivated 钩子函数, 使用props max 可以控制缓存组件个数

最新文章

  1. 个人学习记录2:ajax跨域封装
  2. POJ1191 棋盘分割(DP)
  3. SQL isnull函数
  4. 在阿里云服务器ubuntu14.04运行netcore
  5. android 休眠唤醒机制分析(二) — early_suspend
  6. Robotium API -- 判断测试结果的方法assert、is、search
  7. 爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider)
  8. java设计模式------建造者模式
  9. Tomcat8源码笔记(五)组件Container分析
  10. CPP相关的常见错误(更新ing)
  11. ConcurrentModificationException 集合并发修改异常 解决
  12. 【oracle】入门学习(一)
  13. 在CentOS Linux下部署Activemq 5
  14. 今天练手了下mysqlbinlog,标记下
  15. Android 系统服务一览表
  16. 转: Eclipse设置、调优、使用 (强烈推荐)
  17. js正则表达式——元字符
  18. Python爬虫入门(6):Cookie的使用
  19. Flume NG初次使用
  20. jQuery获取所有父级元素及同级元素及子元素的方法

热门文章

  1. UML--&gt; plantUML安装
  2. GitHub Pages 与 Gitee Pages 上的 Jekyll
  3. ES6笔记分享 part 2
  4. Shell常用命令之read
  5. docker 简单使用
  6. Springboot | Failed to execute goal org.springframework.boot:spring-boot-maven-plugin
  7. C++基类和派生类的构造函数
  8. C语言系列之自增自减运算符的用法(二)
  9. [python之路]格式化显示
  10. HDU_5058_set