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 相关文章推荐
JavaScript NaN和Infinity特殊值 [译]
Sep 20 Javascript
固定背景实现的背景滚动特效示例分享
May 19 Javascript
js jq 单击和双击区分示例介绍
Nov 05 Javascript
JavaScript实现的一个倒计时的类
Mar 12 Javascript
JS仿淘宝实现的简单滑动门效果代码
Oct 14 Javascript
Vue 过渡实现轮播图效果
Mar 27 Javascript
微信小程序 chooseImage选择图片或者拍照
Apr 07 Javascript
Vue组件之Tooltip的示例代码
Oct 18 Javascript
react-router v4如何使用history控制路由跳转详解
Jan 09 Javascript
js代码规范之Eslint安装与配置详解
Sep 08 Javascript
详解关于element级联选择器数据回显问题
Feb 20 Javascript
JS获取当前时间戳方法解析
Aug 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多文件上传实现代码
2014/02/20 PHP
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
php实现三级级联下拉框
2016/04/17 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
使用jquery为table动态添加行的实现代码
2011/03/30 Javascript
JavaScript二维数组实现的省市联动菜单
2014/05/08 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
AngularJS实现网站换肤实例
2021/02/19 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
jQuery实现容器间的元素拖拽功能
2020/12/01 jQuery
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
python分析网页上所有超链接的方法
2015/05/08 Python
使用requests库制作Python爬虫
2018/03/25 Python
浅谈python标准库--functools.partial
2019/03/13 Python
wxPython:python首选的GUI库实例分享
2019/10/05 Python
Django values()和value_list()的使用
2020/03/31 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
2020/04/14 Python
如何理解python面向对象编程
2020/06/01 Python
浅析rem和em和px vh vw和% 移动端长度单位
2016/04/28 HTML / CSS
英国一家专门出售品牌鞋子的网站:Allsole
2016/08/07 全球购物
安全生产检讨书
2014/01/21 职场文书
经典促销广告词大全
2014/03/19 职场文书
C++程序员求职信
2014/05/07 职场文书
心理咨询承诺书
2014/05/20 职场文书
先进工作者事迹材料
2014/12/23 职场文书
继承权公证书范本
2015/01/23 职场文书
研究生个人学年总结
2015/02/14 职场文书
员工辞职信怎么写
2015/02/27 职场文书
银行实习推荐信
2015/03/27 职场文书