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 20 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
Mar 14 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
Nov 21 Javascript
js+html5实现canvas绘制圆形图案的方法
Jun 05 Javascript
animate 实现滑动切换效果【实例代码】
May 05 Javascript
jQuery中选择器的基础使用教程
May 23 Javascript
js实现获取两个日期之间所有日期的方法
Jun 17 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
Sep 05 Javascript
JavaScript生成简单等差数列
Nov 28 Javascript
微信小程序仿RadioGroup改变样式的处理方案
Jul 13 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
Sep 18 Javascript
利用js canvas实现五子棋游戏
Oct 11 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
ThinkPHP之getField详解
2014/06/20 PHP
PHP性能优化大全(php.ini)
2016/05/20 PHP
js中精确计算加法和减法示例
2014/03/28 Javascript
jquery模拟进度条实现方法
2015/08/03 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
很实用的js选项卡切换效果
2016/08/12 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
jquery实现点击页面回到顶部
2016/11/23 Javascript
js实现旋转木马效果
2017/03/17 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
Nuxt.js 数据双向绑定的实现
2019/02/17 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
2019/10/31 Javascript
关于element-ui表单中限制输入纯数字的解决方式
2020/09/08 Javascript
python2 与 python3 实现共存的方法
2018/07/12 Python
Python3对称加密算法AES、DES3实例详解
2018/12/06 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
python Django的web开发实例(入门)
2019/07/31 Python
pytorch 图像预处理之减去均值,除以方差的实例
2020/01/02 Python
Python3.7黑帽编程之病毒篇(基础篇)
2020/02/04 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
简述数组与指针的区别
2014/01/02 面试题
股权转让协议书
2014/04/12 职场文书
小学生保护环境倡议书
2014/05/15 职场文书
2014教师研修学习体会
2014/07/08 职场文书
民间个人借款协议书
2014/09/30 职场文书
参观邀请函范文
2015/02/02 职场文书
如何写辞职信
2015/05/13 职场文书
婚庆公司开业主持词
2015/06/30 职场文书
国庆节新闻稿
2015/07/17 职场文书
党风廉政教育心得体会2016
2016/01/22 职场文书
Python进程池与进程锁之语法学习
2022/04/11 Python