Vue2.0源码解析 - 知其然知其所以然之keep-alive
前言
【一天一个小知识,每天进步一点点】小伙伴们大家好,今天将要给大家分享是Vue中关于组件缓存的一个内置组件 - keep-alive
不知道小伙伴们有没有遇到这样一种情况,在我们的项目开发中,有时候会利用弹出框做一些表单提交的操作,但有时候填着填着鼠标不小心点了一下弹出框以外空白的地方,导致弹出框关闭了,当再次重新打开弹出框的时候,发现之前录的信息全都不见了,是不是瞬间就不淡定了呢。这个时候我们的内置组件keep-alive就会派上用场了。接下来我们就一起分析下keep-alive是干什么用的,它的实现原理又是怎样的。
keep-alive是什么
keep-alive是一个内置的抽象组件,它自身不会渲染一个 DOM 元素,也不会出现在父组件链中;使用keep-alive包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。
keep-alive主要用于保留组件状态或避免重新渲染。也就是说如果一个组件A被keep-alive包裹后,当我切换的组件B后组件A不会被销毁而是会被缓存起来,当我们再次切换回组件A时,组件A中的数据依然还还的不会被重新初始化。
keep-alive的用法
keep-alive的用法也非常简单, 它可以用来包裹动态组件,也可以包裹一个router-view。
<!--包裹动态组件-->
<keep-alive><component :is="view"></component>
</keep-alive>
<!--包裹router-view-->
<keep-alive><router-view></router-view>
</keep-alive>
以上是keep-alive最基本的用法。其实keep-alive还为我们提供3个属性:include、exclude和max
- include: 字符串、数组或正则表达式。只有名称匹配的组件会被缓存。
- exclude: 字符串、数组或正则表达式。任何名称匹配的组件都不会被缓存。
- max: 数字,最多可以缓存多少组件实例。
include 和 exclude prop 允许组件有条件地缓存。二者都可以用逗号分隔字符串、正则表达式或一个数组来表示。
匹配时首先会检查组件自身的 name 选项,如果 name 选项不可用,则匹配它的局部注册名称 (父组件 components 选项的键值)。匿名组件不能被匹配。
- 只有当view是a或b时才会被缓存
<!-- 逗号分隔字符串 --> <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>
- 组件a和b都不会被缓存
<!-- 逗号分隔字符串 --> <keep-alive include="a,b"><component :is="view"></component> </keep-alive>
max:最多可以缓存多少组件实例。如果指定了max prop, 一旦这个数字达到了,在新实例被创建之前,已缓存组件中最久没有被访问的实例会被销毁掉。用法如下:
<keep-alive :max="10"><component :is="view"></component> </keep-alive>
最后需要注意的是:
- keep-alive同时只能渲染一个直属的子组件,如果keep-alive中包含了 v-for则不会生效。
- 如果包含了多个直属子元素,则keep-alive默认会只取第一个子元素渲染。
总结
本文我们以一个dialog表单的场景引出了今天的主角keep-alive,并详细介绍了keep-alive的作用及用法。现在我们知道了keep-alive可以让符合条件的组件缓存起来不被销毁。那么它是如果让组件缓存呢,它的工作原理是怎样的呢?我们将在下篇文章揭晓。
喜欢的小伙伴欢迎点赞留言加关注哦!
Vue2.0源码解析 - 知其然知其所以然之keep-alive相关推荐
- Vue2.0源码解析——编译原理
Vue2.0源码解析--编译原理 前言:本篇文章主要对Vue2.0源码的编译原理进行一个粗浅的分析,其中涉及到正则.高阶函数等知识点,对js的考察是非常的深的,因此我们来好好啃一下这个编译原理的部分. ...
- Vue2.0源码解析 - 知其然知其所以然之Vue.use
前言 小伙伴们大家好.用过Vue的小伙伴都知道,在我们进行Vue开发时,避免不了会使用一些第三方的库,比如说ElementUI组件库.当我们导入好这些组件库后会执行一个Vue.use函数,然后把导进来 ...
- vue2.0源码解析(一)
1.先下载vue源码(当前版本为:2.6.11) 地址: git clone https://github.com/vuejs/vue.git 2.切换到package.json dev脚本中 -c ...
- 锚框、交并比和非极大值抑制(tf2.0源码解析)
锚框.交并比和非极大值抑制(tf2.0源码解析) 文章目录 锚框.交并比和非极大值抑制(tf2.0源码解析) 一.锚框生成 1.锚框的宽高 2.锚框的个数 3.注意点(★★★) 4.tf2.0代码 二 ...
- 前端进阶-手写Vue2.0源码(三)|技术点评
前言 今天是个特别的日子 祝各位女神女神节快乐哈 封面我就放一张杀殿的帅照表达我的祝福 哈哈 此篇主要手写 Vue2.0 源码-初始渲染原理 上一篇咱们主要介绍了 Vue 模板编译原理 它是 Vue ...
- solrlucene3.6.0源码解析(三)
solr索引操作(包括新增 更新 删除 提交 合并等)相关UML图如下 从上面的类图我们可以发现,其中体现了工厂方法模式及责任链模式的运用 UpdateRequestProcessor相当于责任链模式 ...
- Heritrix 3.1.0 源码解析(八)
本文接着分析存储CrawlURI curi的队列容器,最重要的是BdbWorkQueue类及BdbMultipleWorkQueues类 BdbWorkQueue类继承自抽象类WorkQueue,抽象 ...
- Heritrix 3.1.0 源码解析(六)
本文分析BdbFrontier对象的相关状态和方法 BdbFrontier类继承自WorkQueueFrontier类 WorkQueueFrontier类继承自AbstractFrontier类 ...
- Heritrix 3.1.0 源码解析(十一)
上文分析了Heritrix3.1.0系统是怎么添加CrawlURI curi对象的,那么在系统初始化的时候,是怎么载入CrawlURI curi种子的呢? 我们回顾前面的文章,在我们执行采集任务的la ...
最新文章
- 【Redfin SDE intern】跪经
- 《ADO.NET 2.0高级程序设计》读书随笔(1)使用连接池connection pool
- graphviz.backend.ExecutableNotFound: failed to execute ['dot', '-Tpdf', '-O', 'Digraph.gv']
- 如何通过建造餐厅来了解Scala差异
- Flask 框架下 Jinja2 模板引擎高层 API 类——Environment
- altera fpga sdi输出方案_FPGA设计太复杂?四大设计要点总结助你快速上手!
- LuaForUnity4:Lua的函数
- 目标检测(二十二)--R-FCN
- win7下硬盘安装Windows
- emoji.php,简单的处理emoji的PHP类库
- android webview 透明背景,在android中的半透明webview背景
- 染布厂ERP、染厂ERP、漂染厂ERP、纺织印染ERP生产管理系统
- H3C-NE实验主要命令
- 如何用公众号关联认证小程序
- 【量化笔记】动量Momentum相关技术指标以其含义
- 看得见的数据结构Android版之二分搜索树篇
- 在proteus中的排阻的查找_PROTEUS中这个排阻怎么找到?
- cad直线和圆弧倒角不相切_CAD圆角、倒角分不清?详细讲解CAD圆角与倒角对象的区别和技巧...
- 苹果历代iPod产品大全相册
- Android实现涂鸦功能
热门文章
- 实战:JS批量打包下载图片--(zip压缩)
- vbox下的虚拟机ubuntu1604升级安全更新
- SRPG Studio 教程(一) 创建游戏及引用素材
- 企业级旅行App源码、高仿爱鲜蜂源码、iOS Arkit测距源码等
- excel培训机构_中金中国企业跨境并购流程、重点问题和交易架构设计(内部培训)42页...
- python scapy使用教程_scapy的基本用法
- 微信小程序开发实战-第二周
- 4219: 数字菱形————找规律
- 项目管理软件Primavera P6简介
- VC,PE和Hedge Fund