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 相关文章推荐
jsTree树控件(基于jQuery, 超强悍)[推荐]
Sep 01 Javascript
编写可维护面向对象的JavaScript代码[翻译]
Feb 12 Javascript
解析Jquery取得iframe中元素的几种方法
Jul 04 Javascript
JavaScript地图拖动功能SpryMap的简单实现
Jul 17 Javascript
Javascript进制转换实例分析
May 14 Javascript
JSP防止网页刷新重复提交数据的几种方法
Nov 19 Javascript
Angular 常用指令实例总结整理
Dec 13 Javascript
JS验证不重复验证码
Feb 10 Javascript
JavaScript实现删除数组重复元素的5种常用高效算法总结
Jan 18 Javascript
对vue中v-if的常见使用方法详解
Sep 28 Javascript
使用easyui从servlet传递json数据到前端页面的两种方法
Sep 05 Javascript
JS可断点续传文件上传实现代码解析
Jul 30 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/06/08 PHP
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
PHP基础知识回顾
2012/08/16 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
Angular HMR(热模块替换)功能实现方法
2018/04/04 Javascript
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
vue webpack重写cookie路径的方法
2019/07/10 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
Vue 同步异步存值取值实现案例
2020/08/05 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
pymssql ntext字段调用问题解决方法
2008/12/17 Python
Python的动态重新封装的教程
2015/04/11 Python
python传递参数方式小结
2015/04/17 Python
python函数式编程学习之yield表达式形式详解
2018/03/25 Python
浅谈python下tiff图像的读取和保存方法
2018/12/04 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
Python3 读取Word文件方式
2020/02/13 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
上班早退检讨书
2014/01/09 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
员工工作及收入证明
2014/10/28 职场文书
2015年秋季小学开学标语
2015/07/16 职场文书
python 模拟在天空中放风筝的示例代码
2021/04/21 Python
javascript函数式编程基础
2021/09/15 Javascript
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby
SQL SERVER中的流程控制语句
2022/05/25 SQL Server