在Vue.js 3中,<keep-alive> 是一个抽象组件,用于保留其子组件状态,防止在切换组件时销毁它们。这对于在页面间切换时保留组件的状态或避免重复渲染特定组件非常有用。<keep-alive> 主要用于缓存组件,以提高性能和用户体验。

以下是一个简单的例子,演示了如何在Vue.js 3中使用 <keep-alive>

vue

<template>
<div>
<button @click="toggleComponent">Toggle Component</button> <keep-alive>
<component :is="currentComponent" />
</keep-alive>
</div>
</template> <script>
import FirstComponent from './FirstComponent.vue';
import SecondComponent from './SecondComponent.vue'; export default {
data() {
return {
currentComponent: 'FirstComponent',
};
},
components: {
FirstComponent,
SecondComponent,
},
methods: {
toggleComponent() {
this.currentComponent = (this.currentComponent === 'FirstComponent') ? 'SecondComponent' : 'FirstComponent';
},
},
};
</script>

在这个例子中:

  • <keep-alive> 包裹了一个 <component> 元素,该元素使用动态组件 :is 属性根据 currentComponent 的值渲染不同的子组件。
  • 当用户点击 "Toggle Component" 按钮时,currentComponent 的值会切换,导致 <component> 内部的组件切换。

由于 <keep-alive> 的存在,切换时不会销毁被缓存的组件实例,而是将其状态保留在缓存中。这样,在切换回已缓存的组件时,组件不会重新创建,而是从缓存中恢复,从而提高性能和避免不必要的渲染。

需要注意的是,被 <keep-alive> 缓存的组件需要实现 activateddeactivated 生命周期钩子,以便在组件被激活和失活时执行特定的逻辑。这些生命周期钩子允许你在组件被缓存和激活之间执行额外的操作。

<keep-alive> 的生命周期顺序如下:

  1. 第一次渲染(缓存中没有组件实例):

    • beforeCreate
    • created
    • beforeMount
    • mounted
  2. 组件被缓存(不活动状态):

    • deactivated
  3. 组件被激活(再次显示在页面上):

    • activated
  4. 组件被销毁:

    • 如果内存不足或缓存大小限制达到,<keep-alive> 可能会销毁某些缓存的组件实例。在这种情况下,被销毁的组件会触发 beforeDestroydestroyed 生命周期钩子。

总体来说,activated 生命周期钩子用于在组件从缓存中取出并重新激活时执行一些操作,而 deactivated 生命周期钩子用于在组件被缓存时执行一些操作。这样,你可以在这些生命周期钩子中处理状态的保存和恢复,以确保组件在被缓存和激活之间保持一致的状态。

vue3 KeepAlive的更多相关文章

  1. vue3 迫不得已我硬着头皮查看了keepalive的源代码,解决了线上的问题

    1.通过本文可以了解到vue3 keepalive功能 2.通过本文可以了解到vue3 keepalive使用场景 3.通过本文可以学习到vue3 keepalive真实的使用过程 4.通过本文可以学 ...

  2. 好消息,vue3.0 进入 beta 阶段!

    昨天,4 月 16 日,vue 3 正式进入 beta 阶段.同日,尤大参加了 State of Vue 的线上活动,以下是他上传到 google docs 上的 slides : State of ...

  3. vite + ts 快速搭建 vue3 项目 以及介绍相关特性

    博客地址:https://ainyi.com/98 Vue3.0,One Piece 接下来得抽空好好学习了 vite 尤大在 Vue 3.0 beta 直播中推荐了 vite 的工具,强调:针对Vu ...

  4. 【electron+vue3+ts实战便笺exe】二、electron+vue3开发内容

    不要让自己的上限成为你的底线 本来以为有万字的..没想到才堪堪近6000字.为了水文的嫌疑,只挑了重点的地方讲,比如component内的组件就挑了右键弹窗去说明,建议在看本文的时候边查看项目,有不懂 ...

  5. 简单梳理下 Vue3 的新特性

    在 Vue3 测试版刚刚发布的时候,我就学习了下 Composition API,但没想到正式版时隔一年多才出来,看了一下发现还是增加了不少新特性的,在这里我就将它们一一梳理一遍. 本文章只详细阐述 ...

  6. vue3 script setup 定稿

    vue script setup 已经官宣定稿.本文主要翻译了来自 0040-script-setup 的内容. 摘要 在单文件组件(SFC)中引入一个新的 <script> 类型 set ...

  7. 助你上手Vue3全家桶之Vue-Router4教程

    目录 1,前言 1,Router 2.1,跳转 2.2,打开新页面 3,Route 4,守卫 4.1,onBeforeRouteLeave 4.2,onBeforeRouteUpdate 4.3,路由 ...

  8. Vue3.x 关于组件的那些变化(新手必看篇)

    一.组件内的 data 为什么总是函数形式? 我们试着先做一个计数器案例,把 data 的返回形式修改成一个对象.具体的代码如下: <template> <div> <b ...

  9. vue3知识点的自我总结

    1. 我们对ref的错误理解 ref 经常去监听基本数据类型. 同时也可以去监听[数组][对象]都是可以的. ref是深度的监听.并不是大家说的那样不能去监听复杂的数据类型. 只是根据我们推荐ref去 ...

  10. Vue2和Vue3技术整理3 - 高级篇

    3.高级篇 前言 基础篇链接:https://www.cnblogs.com/xiegongzi/p/15782921.html 组件化开发篇链接:https://www.cnblogs.com/xi ...

随机推荐

  1. 基于Confluent+Flink的实时数据分析最佳实践

    简介:在实际业务使用中,需要经常实时做一些数据分析,包括实时PV和UV展示,实时销售数据,实时店铺UV以及实时推荐系统等,基于此类需求,Confluent+实时计算Flink版是一个高效的方案. 业务 ...

  2. 3月2日,阿里云开源 PolarDB 企业级架构将迎来重磅发布

    简介:2022年3月2日,开源 PolarDB 企业级架构将迎来重磅发布!本次发布会将首次公开开源 PolarDB 的总体结构设计和企业级特性,对 PolarDB for PostgreSQL 的存储 ...

  3. 探秘RocketMQ源码——Series1:Producer视角看事务消息

    简介: 探秘RocketMQ源码--Series1:Producer视角看事务消息 1. 前言 Apache RocketMQ作为广为人知的开源消息中间件,诞生于阿里巴巴,于2016年捐赠给了Apac ...

  4. 实操指南 | Resource Queue如何实现对AnalyticDB PostgreSQL的资源管理?

    简介: 作者:阿里云数据库OLAP产品部 - 子华 一 背景 AnalyticDB PostgreSQL版(简称ADB PG)是阿里云数据库团队基于PostgreSQL内核(简称PG)打造的一款云原生 ...

  5. [Py] Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work

    当通过常规命令安装 pip install pydot 和 brew install graphviz 之后,在代码中 import pydot 依旧不生效. 比如:在 tensorflow 使用 t ...

  6. Ingress-Controller高可用方案及多租户场景(21)

    一.Ingress-controller高可用 Ingress Controller 是集群流量的接入层,对它做高可用非常重要,可以基于 keepalive 实现 nginx-ingress-cont ...

  7. vue下获得经纬度省市区

    1.根目录html文件引入 <!--引入百度 API,"ak=" 后面一串码是密钥,最好自己申请--> <script type="text/javas ...

  8. 基于 RedHat 系的 Linux 常用命令 & 常见系统设定

    闲言碎语 除特定指明外,本文默认基于 RedHat Enterprise Linux 8+ 的阐述. 基于CentOS推出的开源系统,国内的阿里推出Anolis OS,华为的OpenEuler.为填补 ...

  9. nvm环境安装

    目录 nvm是什么 使用背景 nvm的坑. nvm,node,npm之间的区别. nvm.nodejs.npm的关系: nvm-windows下载地址 安装 linux . mac 源码包下载地址 解 ...

  10. WEB服务与NGINX(22)- nginx的七层负载均衡功能

    目录 1. NGINX实现负载均衡功能 1.1 nginx负载均衡概述 1.2 nginx实现http的负载均衡 1.2.1 nginx基于http负载均衡场景配置 1.2.1.1 负载均衡相关参数 ...