我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue中缓存组件keepalive的介绍及使用方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue中缓存组件keepalive的介绍及使用方法

介绍

keep-alive是vue的内置组件,可以用来缓存组件。当它包裹动态组件时,会缓存不活动的组件实例,不会销毁它们;将不活动的组件的状态保留在内存中,可以防止重复渲染DOM,减少加载事件和性能消耗。

注意:keep-alive是一个抽象组件,自身不会渲染成一个DOM元素,也不会出现在父组件链中。

原理:

在 created 函数调用时将需要缓存的 VNode 节点保存在 this.cache 中/在render(页面渲染) 时,如果 VNode 的 name 符合缓存条件(可以用 include 以及 exclude 控制),则会从 this.cache 中取出之前缓存的 VNode 实例进行渲染。

使用

缓存所有的组件

在APP.js中缓存所有组件

<template>
  <div id="app">
    <keep-alive>
      <NativeBtn>
      <router-view />
    </keep-alive>
  </div>
</template>

缓存某个组件

缓存某个组件就直接在该组件的外层嵌套一层<keep-alive>

<template>
  <div id="app">
    <!-- 只缓存NativeBtn组件 -->
    <keep-alive>
      <NativeBtn />
    </keep-alive>
    <router-view />
  </div>
</template>

keep-alive的使用示例

先来看看不加keep alive的情况

代码:

keepAliveDemo的代码

<template>
  <div>
    <button @click="changeComp">切换</button>
    <component :is="showComp" />
  </div>
</template>
<script>
import KeepAlivePageC from "./KeepAlivePageC.vue";
import KeepAlivePageB from "./KeepAlivePageB.vue";
export default {
  name: "keepAliveDemo",
  components: { KeepAlivePageC, KeepAlivePageB },
  data() {
    return {
      compType: "1",
    };
  },
  computed: {
    showComp() {
      if (this.compType === "1") {
        return KeepAlivePageC;
      } else {
        return KeepAlivePageB;
      }
    },
  },
  methods: {
    changeComp() {
      console.log("==== 点击切换按钮");
      this.compType = this.compType === "1" ? "2" : "1";
    },
  },
};
</script>

KeepAlivePageB的代码

<template>
  <div>KeepAlivePageB</div>
</template>
<script>
export default {
  name: "KeepAlivePageB",
  beforeCreate() {
    console.log(" KeepAlivePageB beforeCreate 方法执行了");
  },
  created() {
    console.log(" KeepAlivePageB created 方法执行了");
  },
  beforeMount() {
    console.log(" KeepAlivePageB beforeMount 方法执行了");
  },
  mounted() {
    console.log(" KeepAlivePageB mounted 方法执行了");
  },
  beforeUpdate() {
    console.log(" KeepAlivePageB beforeUpdate 方法执行了");
  },
  updated() {
    console.log(" KeepAlivePageB updated 方法执行了");
  },
  beforeDestroy() {
    console.log(" KeepAlivePageB beforeDestroy 方法执行了");
  },
  destroyed() {
    console.log(" KeepAlivePageB destroyed 方法执行了");
  },
};
</script>

KeepAlivePageC的代码

<template>
  <div>KeepAlivePageC</div>
</template>
<script>
export default {
  name: "KeepAlivePageC",
  beforeCreate() {
    console.log(" KeepAlivePageC beforeCreate 方法执行了");
  },
  created() {
    console.log(" KeepAlivePageC created 方法执行了");
  },
  beforeMount() {
    console.log(" KeepAlivePageC beforeMount 方法执行了");
  },
  mounted() {
    console.log(" KeepAlivePageC mounted 方法执行了");
  },
  beforeUpdate() {
    console.log(" KeepAlivePageC beforeUpdate 方法执行了");
  },
  updated() {
    console.log(" KeepAlivePageC updated 方法执行了");
  },
  beforeDestroy() {
    console.log(" KeepAlivePageC beforeDestroy 方法执行了");
  },
  destroyed() {
    console.log(" KeepAlivePageC destroyed 方法执行了");
  },
};
</script>

不使用keep alive时,切换按钮会有组件的创建和销毁

再来看下使用keep alive的情况。修改keepAliveDemo布局代码

<template>
  <div>
    <button @click="changeComp">切换</button>
    <keep-alive>
      <component :is="showComp" />
    </keep-alive>
  </div>
</template>

发现开始会有组件的创建,但是没有组件的销毁,当两个组件都创建了实例之后,再点击切换按钮,组件既不创建也不销毁,说明使用了缓存的组件实例。

include和exclude属性的使用

include:字符串或者正则表达式。只有匹配的组件会被缓存;

exclude:字符串或者正则表达式。任何匹配的组件都不会被缓存。

include的使用

只有匹配上的组件才会被缓存,没匹配上的组件不会被缓存。

修改keepAliveDemo布局代码如下

<template>
  <div>
    <button @click="changeComp">切换</button>
    <keep-alive include="KeepAlivePageC">
      <component :is="showComp" />
    </keep-alive>
  </div>
</template>

可以看到KeepAlivePageC只创建了一次,而KeepAlivePageB一直在创建和销毁

exclude的使用

匹配上的组件不会被被缓存,没匹配上的组件会被缓存。

修改keepAliveDemo布局代码如下

<template>
  <div>
    <button @click="changeComp">切换</button>
    <keep-alive exclude="KeepAlivePageC">
      <component :is="showComp" />
    </keep-alive>
  </div>
</template>

可以看到KeepAlivePageB只创建了一次,而KeepAlivePageC一直在创建和销毁

生命周期

和keep-alive相关的生命钩子是activated和deactivated

activated:被 keep-alive 缓存的组件激活时调用

deactivated:被 keep-alive 缓存的组件失活时调用

在KeepAlivePageB和KeepAlivePageC中添加activated和deactivated钩子,依然使用上面的exclude的例子

可以看到当KeepAlivePageB活动使会执行activated钩子,失活时会调用deactivated钩子

到此这篇关于vue中缓存组件keep alive的介绍及使用方法的文章就介绍到这了,更多相关vue keep alive内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue中缓存组件keepalive的介绍及使用方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue中缓存组件keepalive的介绍及使用方法

这篇文章主要介绍了vue缓存组件keepalive的相关资料,keep-alive组件是使用includeexclude这两个属性传入组件名称来确认哪些可以被缓存的,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
2022-11-13

vue中keepAlive组件的作用和使用方法详细介绍

这篇文章主要讲解了“vue中keepAlive组件的作用和使用方法详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue中keepAlive组件的作用和使用方法详细介绍”吧!前言在面试
2023-06-20

React中实现keepalive组件缓存效果的方法详解

由于react官方并没有提供缓存组件相关的api(类似vue中的keepalive),在某些场景,会使得页面交互性变的很差。所以本文为大家介绍了React中实现keepalive组件缓存效果的方法,希望对大家有所帮助
2023-01-14

ASP中文件上传组件ASPUpload介绍和使用方法

ASPUpload是一个用于在ASP网页中实现文件上传的组件。它提供了简单易用的接口和丰富的功能,方便开发者在网页中实现文件上传功能。使用方法如下:1. 首先,需要将ASPUpload组件添加到项目中。可以从官方网站(http://www.
2023-08-22

vue中使用keep-alive动态删除已缓存组件方式

这篇文章主要介绍了vue中使用keep-alive动态删除已缓存组件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

asp.net Repeater控件的说明及详细介绍及使用方法

Repeater 控件不具备内置的呈现功能,这表示用户必须通过创建模板为 Repeater 控件提供布局。当该页运行时,Repeater 控件依次通过数据源中的记录为每个记录呈现一个项。 他很简单,用起来也不够强大,但是应了那句老话,杀鸡焉
2022-06-07

Java中二维数组的正确使用方法介绍

Java中有一维数组,二维数组以及多维数组,在这篇文章中,将给大家详细介绍一下如何正确使用Java中的二维数组,感兴趣的小伙伴跟着小编一起学习吧
2023-05-19

Vue中组件递归的方法及使用问题有哪些

本篇内容介绍了“Vue中组件递归的方法及使用问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、第一个问题就是,循环表单;看下图然后
2023-06-29

Vue自定义组件中v-model的使用方法示例

日常开发中除了直接在input标签上使用v-model指令外,封装的组件也需要v-model,下面这篇文章主要给大家介绍了关于Vue自定义组件中v-model使用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-05-19

web前端:关于Vue中,在方法中使用(操作)子组件获取到的数据

编程学习网:Vue系列产品为3D自然环境的动画制作和渲染提供了一系列的解决方案。Vue系列有很多不同的产品,这是为了满足不同阶层的用户的需要:可以满足专业的制作工作室,同样也能满足3D自由艺术家。
web前端:关于Vue中,在方法中使用(操作)子组件获取到的数据
2024-04-23

编程热搜

目录