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 相关文章推荐
类似天猫商品详情随浏览器移动的示例代码
Feb 27 Javascript
用JS在浏览器中创建下载文件
Mar 05 Javascript
javascript随机之洗牌算法深入分析
Jun 07 Javascript
Javascript基础教程之变量
Jan 18 Javascript
JS实现HTML表格排序功能
Aug 05 Javascript
微信小程序 支付简单实例及注意事项
Jan 06 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
Aug 10 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
Feb 03 Javascript
解决layui中的form表单与button的点击事件冲突问题
Aug 15 Javascript
vue-router启用history模式下的开发及非根目录部署方法
Dec 23 Javascript
ES6的异步操作之promise用法和async函数的具体使用
Dec 06 Javascript
taro 实现购物车逻辑的实例代码
Jun 05 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+Mysql无限分类的方法汇总
2015/03/02 PHP
thinkPHP模板算术运算相关函数用法分析
2016/07/12 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
javascript String 的扩展方法集合
2008/06/01 Javascript
js滚动条回到顶部的代码
2011/12/06 Javascript
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
Javascript遍历table中的元素示例代码
2014/07/08 Javascript
jQuery中find()方法用法实例
2015/01/07 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
JSON+Jquery省市区三级联动
2016/01/13 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
JS运动特效之链式运动分析
2018/01/24 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
2018/09/18 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
Python入门_条件控制(详解)
2017/05/16 Python
python 简单的绘图工具turtle使用详解
2017/06/21 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
2018/04/10 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
css3实现垂直下拉动画菜单示例
2014/04/22 HTML / CSS
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
美国校园市场:OCM
2017/06/08 全球购物
会计自荐书
2013/12/02 职场文书
老同学聚会感言
2014/02/23 职场文书
关于抽烟的检讨书
2014/02/25 职场文书
生产现场禁烟通知
2015/04/23 职场文书
Python四款GUI图形界面库介绍
2022/06/05 Python