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 相关文章推荐
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
Nov 30 Javascript
JAVASCRIPT下判断IE与FF的比较简单的方式
Oct 17 Javascript
JavaScript面向对象之静态与非静态类
Feb 03 Javascript
BOM与DOM的区别分析
Oct 26 Javascript
js字符串转换成xml对象并使用技巧解读
Apr 18 Javascript
jquery实现的一个导航滚动效果具体代码
May 27 Javascript
检查输入的是否是数字使用keyCode配合onkeypress事件
Jan 23 Javascript
JS中获取函数调用链所有参数的方法
May 07 Javascript
JavaScript剩余操作符Rest Operator详解
Jul 20 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
Jan 12 Javascript
JS轮播图的实现方法
Aug 24 Javascript
Vue和Flask通信的实现
May 19 Vue.js
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
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
php微信开发接入
2016/08/27 PHP
php实现的生成排列算法示例
2019/07/25 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
2019/08/03 PHP
[原创]保存的js无法执行的解决办法
2007/02/25 Javascript
jQuery 选择器项目实例分析及实现代码
2012/12/28 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
js之onload事件的一点使用心得
2013/08/14 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
js取消单选按钮选中示例代码
2013/11/14 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
js获取当前日期时间及其它操作汇总
2015/04/17 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
举例详解JavaScript中Promise的使用
2015/06/24 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
vue兄弟组件传递数据的实例
2018/09/06 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
Python字符串和文件操作常用函数分析
2015/04/08 Python
使用Turtle画正螺旋线的方法
2017/09/22 Python
Python给定一个句子倒序输出单词以及字母的方法
2018/12/20 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
python的等深分箱实例
2019/11/22 Python
Python搭建HTTP服务过程图解
2019/12/14 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
德国运动鞋网上商店:Afew Store
2018/01/05 全球购物
Fenty Beauty官网:蕾哈娜创立的美妆品牌
2021/01/07 全球购物
公益活动邀请函
2014/02/05 职场文书
安全责任书范文
2014/03/12 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
企业党建工作总结2015
2015/05/26 职场文书
忠犬八公的故事观后感
2015/06/05 职场文书
六一儿童节园长致辞
2015/07/31 职场文书