在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. 基于ChatGPT打造安全脚本工具流程

    前言 以前想要打造一款自己的工具,想法挺好实际上是难以实现,第一不懂代码的构造,只有一些工具脚本构造思路,第二总是像重复造轮子这种繁琐枯燥工作,抄抄改改搞不清楚逻辑,想打造一款符合自己工作的自定义的脚 ...

  2. Django框架——Q查询进阶、ORM查询优化、事务操作、字段类型、字段参数、Ajax、Content—Type、ajax携带文件

    Q查询进阶 from django.db.models import Q q_obj = Q() # 1.产生q对象 q_obj.connector = 'or' # 默认多个条件的连接是and可以修 ...

  3. 【笔记】go语言--Map

    go语言--Map //基本结构,定义 m := map[string] string { "name" : "ccmouse",//这些是无序的,是hashm ...

  4. 极致体验!基于阿里云 Serverless 快速部署 Function

    简介: 云计算的不断发展,涌现出很多改变传统 IT 架构和运维方式的新技术,而以虚拟机.容器.微服务为代表的技术更是在各个层面不断提升云服务的技术能力,它们将应用和环境中很多通用能力变成了一种服务.但 ...

  5. 大数据时代下,App数据隐私安全你真的了解么?

    ​简介:你是否有过这样的经历:你和朋友聊天表达你近期想要购买某件商品,第二天当你打开某购物软件时,平台向你推送的商品正是你想要购买的:或者,你是否接到过陌生来电,他们准确的报出了你的名字和年龄.... ...

  6. Joint Consensus两阶段成员变更的单步实现

    ​简介: Raft提出的两阶段成员变更Joint Consensus是业界主流的成员变更方法,极大的推动了成员变更的工程应用.但Joint Consensus成员变更采用两阶段,一次变更需要提议两条日 ...

  7. 延迟绑定与retdlresolve

    延迟绑定与retdlresolve 我们以前在ret2libc的时候,我们泄露的libc地址是通过延迟绑定实现的,我们知道,在调用libc里面的函数时候,它会先通过plt表和gor表绑定到,函数真实地 ...

  8. C# 获取指定文件夹中所有的文件(包括子文件夹的文件)

    有个需求中需要播放指定路径的声音,但你必须要有该路径的声音才可以播放,如果没有该文件则播放默认的声音,该方法用于初始化应用的时候获取指定目录的所有文件,便于后来播放声音的时判断路径是否存在. usin ...

  9. LVGL学习资料

    一.资料整理 官网:https://lvgl.io/ 使用手册: 官方的使用手册是英文版的,百问网将其翻译成中文版的文档.地址如下: 官方使用文档:https://docs.lvgl.io/maste ...

  10. THUWC2024&NOIWC2024游记

    以 NOIWC 考试日为 Day 1 好了. Day -6 到重庆了.去报到,然后直接不去试机走了,这波主打一个自信. Day -5 THUWC Day1,四道传统题. 开 T1,一眼有一个 \(O( ...