在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. 深入分析C++对象模型之移动构造函数

    接下来我将持续更新"深度解读<深度探索C++对象模型>"系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表. C++11新标准 ...

  2. 剑指offer56(Java)-数组中出现的次数Ⅰ(中等)

    题目: 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 示例 1: 输入:nums = [4,1, ...

  3. 力扣521(java&python)-最长特殊序列Ⅰ(简单)

    题目: 给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列  的长度.如果不存在,则返回 -1 . 「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的 ...

  4. Java Map中那些巧妙的设计

    简介: 他山之石可以攻玉,这些巧妙的设计思想非常有借鉴价值,可谓是最佳实践.然而,大多数有关Java Map原理的科普类文章都是专注于"点",并没有连成"线", ...

  5. [ML] 科学编程语言 Octave 简单操作

    octave 是和 matlab 类似的软件,可以方便的进行矩阵计算.图形绘图. matlab 收费,octave 是 gnu 开源软件. Mac 安装: $ brew install octave ...

  6. 2018-3-8-WPF-UncommonField-类型是什么

    title author date CreateTime categories WPF UncommonField 类型是什么 lindexi 2018-3-8 16:25:2 +0800 2018- ...

  7. 大模型必备 - 中文最佳向量模型 acge_text_embedding

    近期,上海合合信息科技股份有限公司发布的文本向量化模型 acge_text_embedding 在中文文本向量化领域取得了重大突破,荣获 Massive Text Embedding Benchmar ...

  8. 5.prometheus监控--监控nginx

    1.监控程序环境准备 mkdir /data/docker-compose -p cd /data/docker-compose cat > docker-compose.yaml <&l ...

  9. Golang 开发常用代码片段

    Struct to JsonString type BaseRequest struct { httpMethod string domain string path string params ma ...

  10. 🔥🔥v1.9.2-httpsok快速申请免费谷歌SSL证书

    v1.9.2-httpsok快速申请免费谷歌SSL证书 介绍 httpsok 是一个便捷的 HTTPS 证书自动续签工具,专为 Nginx .OpenResty 服务器设计.已服务众多中小企业,稳定. ...