当前位置: 首页 > article >正文

Vue 3 KeepAlive 教程

Vue 3 KeepAlive 教程

1. 什么是 KeepAlive?

KeepAlive 是 Vue 3 中的一个内置组件,用于缓存动态组件或路由组件。它的主要作用是在组件切换时保留组件的状态,避免重复渲染和重新创建组件,从而提高应用性能。

2. KeepAlive 的基本用法

2.1 基础示例

<template>
  <KeepAlive>
    <component :is="currentComponent"></component>
  </KeepAlive>
</template>

<script setup>
import { ref } from 'vue'
import ComponentA from './ComponentA.vue'
import ComponentB from './ComponentB.vue'

const currentComponent = ref(ComponentA)
</script>

2.2 在 Vue Router 中使用

<router-view v-slot="{ Component }">
  <KeepAlive>
    <component :is="Component" />
  </KeepAlive>
</router-view>

3. KeepAlive 的高级配置

3.1 include 和 exclude 属性

<KeepAlive :include="['ComponentA', 'ComponentB']" :exclude="['ComponentC']">
  <component :is="currentComponent"></component>
</KeepAlive>
  • include:指定需要缓存的组件
  • exclude:指定不需要缓存的组件
  • 可以使用字符串、正则表达式或数组

3.2 max 属性限制缓存数量

<KeepAlive :max="10">
  <component :is="currentComponent"></component>
</KeepAlive>

max 属性用于限制最大缓存组件数量,超过限制时会按照 LRU(最近最少使用)策略移除组件。

4. 生命周期钩子

在使用 KeepAlive 时,组件会新增两个生命周期钩子:

  • onActivated:组件被激活时触发
  • onDeactivated:组件被缓存时触发
<script setup>
import { onActivated, onDeactivated } from 'vue'

onActivated(() => {
  console.log('组件被激活')
})

onDeactivated(() => {
  console.log('组件被缓存')
})
</script>

5. 实际应用场景

5.1 保留表单状态

<template>
  <KeepAlive>
    <UserForm v-if="isFormVisible" />
  </KeepAlive>
</template>

<script setup>
const isFormVisible = ref(true)
</script>

5.2 性能优化的标签页切换

<template>
  <KeepAlive>
    <component :is="currentTab" />
  </KeepAlive>
</template>

6. 注意事项

  1. KeepAlive 只能缓存非路由组件
  2. 对于需要频繁更新的组件,谨慎使用缓存
  3. 使用 include/exclude 时,建议使用组件名称

7. 最佳实践

  • 在复杂的单页应用中,合理使用 KeepAlive
  • 对于数据变化频繁的组件,可以结合 onActivated 钩子重新获取数据
  • 注意内存占用,适当设置 max 属性

8. 兼容性

Vue 3 中的 KeepAlive 完全兼容 Vue 2,用法基本一致。

结语

KeepAlive 是 Vue 3 中提高应用性能的重要组件,合理使用可以大大优化用户体验和页面加载速度。


http://www.kler.cn/a/415128.html

相关文章:

  • Spring Boot 同时接受文件和实体及 Postman 测试实战
  • 使用Java代码操作Kafka(五):Kafka消费 offset API,包含指定 Offset 消费以及指定时间消费
  • 微信小程序数据请求教程:GET与POST请求详解
  • Basemap 在地图上显示图例
  • Spring Boot【三】
  • 【AI绘画】Midjourney进阶:色调详解(下)
  • Unity3d C# 实现一个基于UGUI的自适应尺寸图片查看器(含源码)
  • 【CSS】设置文本超出N行省略
  • 第六篇:其他窗口部件 QLineEdit
  • 更快更省更划算:了解亚马逊云科技自研芯片
  • Vue表单绑定入
  • 【GPT】为什么要力量训练?
  • 使用easyexcel导出复杂模板,同时使用bean,map,list填充
  • MT管理器v2.14.5-MT管理器-能强大的Android文件管理工具,主要用于管理和编辑手机中的文件-MT管理器vip版本下载-登录即可有vip
  • 02.ES6(2)
  • docker-elasticsearch-kibana-logstash
  • Vue Promise的使用,界面使用异步线程循环执行方法(模拟线程)
  • Java基础面试题08:Java中Exception和Error有什么区别?
  • IDEA如何快速地重写方法,如equals、toString等
  • Sybase数据恢复—Sybase数据库无法启动,Sybase Central连接报错的处理案例
  • 反向代理服务器的用途
  • uniapp关闭sourceMap的生成,提高编译、生产打包速度
  • 如何配置 Gitea 的邮箱功能
  • React Native 原生开发指南
  • MySQL并发事务问题和隔离级别
  • Ubuntu 18.04 中安装 RDKit(针对 Python 2.7)