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学习笔记二 实现可编辑的表格
Apr 09 Javascript
javascript实现依次输入input自动定焦
Dec 23 Javascript
使用jquery组件qrcode生成二维码及应用指南
Feb 22 Javascript
原生JavaScript实现异步多文件上传
Dec 02 Javascript
AngularJS过滤器filter用法分析
Dec 11 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
May 15 jQuery
PM2自动部署代码步骤流程总结
Dec 10 Javascript
浅谈Javascript常用正则表达式应用
Mar 08 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
May 02 Javascript
JS实现进度条动态加载特效
Mar 25 Javascript
详解element上传组件before-remove钩子问题解决
Apr 08 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
Nov 04 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中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
PHP如何实现订单的延时处理详解
2017/12/30 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
jquery使用$(element).is()来判断获取的tagName
2014/08/24 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
python中List的sort方法指南
2014/09/01 Python
Python入门之三角函数sin()函数实例详解
2017/11/08 Python
tensorflow获取变量维度信息
2018/03/10 Python
python爬虫实例详解
2018/06/19 Python
Scrapy框架使用的基本知识
2018/10/21 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
Django 创建后台,配置sqlite3教程
2019/11/18 Python
基于python实现图片转字符画代码实例
2020/09/04 Python
python实现经典排序算法的示例代码
2021/02/07 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
使用phonegap查找联系人的实现方法
2017/03/31 HTML / CSS
祖国在我心中演讲稿600字
2014/09/23 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
毕业生的自我鉴定表范文
2019/05/16 职场文书
教你怎么用python爬取爱奇艺热门电影
2021/05/20 Python
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL