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 相关文章推荐
如何用js控制css中的float的代码
Aug 16 Javascript
QUnit jQuery的TDD框架
Nov 04 Javascript
js 利用className得到对象的实现代码
Nov 15 Javascript
js传参数受特殊字符影响错误的解决方法
Oct 21 Javascript
JavaScript极简入门教程(三):数组
Oct 25 Javascript
js+css实现select的美化效果
Mar 24 Javascript
js简单正则验证汉字英文及下划线的方法
Nov 28 Javascript
基于JavaScript实现类名的添加与移除
Apr 23 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
May 17 jQuery
vue + element-ui实现简洁的导入导出功能
Dec 22 Javascript
vue在响应头response中获取自定义headers操作
Jul 24 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
Jan 27 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中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
搭建基于Docker的PHP开发环境的详细教程
2015/07/01 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
php7性能提升的原因详解
2019/10/13 PHP
根据地区不同显示时间的javascript代码
2007/08/13 Javascript
jQuery 使用个人心得
2009/02/26 Javascript
支持ie与FireFox的剪切板操作代码
2009/09/28 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
移动端js触摸事件详解
2016/09/18 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
js JSON.stringify()基础详解
2019/06/19 Javascript
对pandas replace函数的使用方法小结
2018/05/18 Python
Python 内置函数globals()和locals()对比详解
2019/12/23 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
SpringBoot实现登录注册常见问题解决方案
2020/03/04 Python
python 实现仿微信聊天时间格式化显示的代码
2020/04/17 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
商务助理岗位职责
2013/11/13 职场文书
英语专业职业生涯规划范文
2014/03/05 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
北京颐和园导游词
2015/01/30 职场文书
邀请书模板
2015/02/02 职场文书
教师文明餐桌光盘行动倡议书
2015/04/28 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
赤壁观后感(2)
2015/06/15 职场文书
婚育证明格式
2015/06/17 职场文书
工程款催款函
2015/06/24 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
Redis可视化客户端小结
2021/06/10 Redis
Vue2.0搭建脚手架
2022/03/13 Vue.js
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis