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 相关文章推荐
基于jquery的自定义鼠标提示效果 jquery.toolTip
Nov 14 Javascript
javascript定时变换图片实例代码
Mar 17 Javascript
jquery 模板的应用示例
Nov 12 Javascript
优化RequireJS项目的相关技巧总结
Jul 01 Javascript
基于Javascript实现返回顶部按钮
Feb 29 Javascript
vue cli2.0单页面title修改方法
Jun 07 Javascript
Element ui 下拉多选时新增一个选择所有的选项
Aug 21 Javascript
基于vue、react实现倒计时效果
Aug 26 Javascript
微信小程序之 catalog 切换实现解析
Sep 12 Javascript
vue 路由子组件created和mounted不起作用的解决方法
Nov 05 Javascript
webpack 最佳配置指北(推荐)
Jan 07 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
Oct 29 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 写文本日志实现代码
2010/05/18 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
javascript 定义初始化数组函数
2009/09/07 Javascript
重载toString实现JS HashMap分析
2011/03/13 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
JavaScript使用Math.Min返回两个数中较小数的方法
2015/04/06 Javascript
使用jquery.qrcode.js生成二维码插件
2016/10/17 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
shiro授权的实现原理
2017/09/21 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
10行原生JS实现文字无缝滚动(超简单)
2018/01/02 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
vue路由缓存的几种实现方式小结
2020/02/02 Javascript
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
python线程池threadpool使用篇
2018/04/27 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
Selenium元素定位的30种方式(史上最全)
2020/05/11 Python
Python-for循环的内部机制
2020/06/12 Python
什么是python的函数体
2020/06/19 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
物理学专业自荐信
2014/06/11 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书
2019同学聚会主持词
2019/05/06 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
2021/07/07 SQL Server