Vue中 key keep-alive的实现原理


Posted in Javascript onSeptember 18, 2018

vue2.0提供了一个keep-alive组件用来缓存组件,避免多次加载相应的组件,减少性能消耗

keep-aliv是Vue.js的一个内置组件。它能够不活动的组件实例保存在内存中,而不是直接将其销毁,它是一个抽象组件,不会被渲染到真实DOM中,也不会出现在父组件链中。

它有两个生命周期:

  1. activated: keep-alive组件激活时调用
  2. deactivated: keep-alive组件停用时调用

它提供了include与exclude两个属性,允许组件有条件地进行缓存。

keep-alive key

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <script type="text/javascript" src="./vue.js"></script>
</head>
<body>
  <div id="app">
    <keep-alive>
      <child-component key="1" v-if="seen" name="1"></child-component>
      <child-component key="2" v-if="!seen" name="2"></child-component>
    </keep-alive>
    <button @click="toggle">toggle</button>
  </div>
  <script type="text/javascript">
    Vue.component('child-component', {
      template: `<input type="text" placeholder="enter">`,
      data() {
        return {}
      },
      props: ["name"],
      mounted() {
        console.log(`${this.name} mounted`)
      }
    })
    const vm = new Vue({
      el: "#app",
      data: {
        seen: true
      },
      methods: {
        toggle() {
          this.seen = !this.seen;
        }
      }
    })
  </script>
</body>
</html>

key是标识元素不再被复用,注意key是Vue中的一个保留的属性,不能作为prop传递给子组件,否则会在控制台看到Vue的报错

但是keep-alive标识不重复创建组件实例,也就是只会触发一次created mounted事件,

利用两者可以对组件的复用进行比较精细的管理

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
append和appendTo的区别以及appendChild用法
Dec 24 Javascript
IE下双击checkbox反应延迟问题的解决方法
Mar 27 Javascript
JavaScript实现的经典文件树菜单效果
Sep 08 Javascript
jQuery实现切换页面过渡动画效果
Oct 29 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
Jan 27 Javascript
分享JavaScript监听全部Ajax请求事件的方法
Aug 28 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
Sep 13 Javascript
正则表达式,替换所有HTML标签的简单实例
Nov 28 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
Oct 14 Javascript
微信小程序swiper使用网络图片不显示问题解决
Dec 13 Javascript
浅谈Vue组件单元测试究竟测试什么
Feb 05 Javascript
浅谈JavaScript中的“!!”作用
Aug 03 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
Sep 18 #Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
Sep 18 #Javascript
vue服务端渲染添加缓存的方法
Sep 18 #Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
Sep 18 #Javascript
微信小程序开发之路由切换页面重定向问题
Sep 18 #Javascript
在小程序中使用canvas的方法示例
Sep 17 #Javascript
webpack4打包vue前端多页面项目
Sep 17 #Javascript
You might like
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
PHP中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
一个好用的PHP验证码类实例分享
2013/12/27 PHP
js 数组克隆方法 小结
2010/03/20 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
windows下wxPython开发环境安装与配置方法
2014/06/28 Python
python executemany的使用及注意事项
2017/03/13 Python
Python简单读取json文件功能示例
2017/11/30 Python
python skimage 连通性区域检测方法
2018/06/21 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
python日志通过不同的等级打印不同的颜色(示例代码)
2021/01/13 Python
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
人力资源管理专业毕业生推荐信
2013/11/07 职场文书
淘宝网店营销策划书
2014/01/11 职场文书
经济管理毕业生求职信
2014/03/15 职场文书
2014年党小组工作总结
2014/12/20 职场文书
增值税发票丢失证明
2015/06/19 职场文书
处罚决定书范文
2015/06/24 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书
承诺书的内容有哪些,怎么写?
2019/06/21 职场文书
《钢铁是怎样炼成的》高中读后感
2019/08/07 职场文书
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫
java中如何截取字符串最后一位
2022/07/07 Java/Android