Vue 3 路由组件缓存keep-alive

news/2024/10/7 6:46:13

Vue 3 路由组件缓存

Vue3 KeepAlive官方文档

1. keep-alive 基本介绍

  • keep-alive 是 Vue 的内置组件,用于缓存动态组件或路由组件,避免组件被频繁销毁和重建,从而提高性能。
  • 当组件被 keep-alive 包裹后,在路由切换时不会销毁组件,而是将其缓存起来。下次切换回来时,会直接使用缓存,而不是重新渲染。

2. keep-alive 基本使用

<template><keep-alive><router-view /></keep-alive>
</template>
  • router-view 用于显示当前匹配的路由组件,包裹在 keep-alive 中后,可以实现组件的缓存。

3. keep-alive 的属性

  • include:指定需要被缓存的组件。匹配组件的 name 属性,可以是字符串或正则表达式。
  • exclude:指定不需要被缓存的组件。匹配组件的 name 属性,可以是字符串或正则表达式。
  • max:最多缓存的组件实例数量。超过这个数量时,最久没有使用的实例会被销毁。

示例:

<template><keep-alive include="Home,About" exclude="Contact" max="3"><router-view /></keep-alive>
</template>
  • include: 只缓存 HomeAbout 组件。
  • exclude: 不缓存 Contact 组件。
  • max: 最多缓存 3 个组件实例。

4. 路由组件的缓存

  • 在 Vue Router 中,使用 keep-alive 缓存路由组件时,确保每个路由组件都有一个唯一的 name 属性。

  • 路由配置示例:

    const routes = [{ path: '/home', name: 'Home', component: () => import('@/views/Home.vue') },{ path: '/about', name: 'About', component: () => import('@/views/About.vue') },{ path: '/contact', name: 'Contact', component: () => import('@/views/Contact.vue') }
    ];
    
  • 组件示例:

    <script>
    export default {name: 'Home'
    };
    </script>
    
  • 在主组件中使用 keep-alive 缓存这些路由组件:

    <template><keep-alive include="Home,About"><router-view /></keep-alive>
    </template>
    

注意,include和exclude的值是对应的组件名
在vue3的setup语法糖中可以使用unplugin-vue-define-options插件简化操作
Vue3 name 属性使用技巧

<script setup lang="ts">
defineOptions({name: "MyComponent"  
})
<script>

还可以使用vite-plugin-vue-setup-extend插件来直接在script上进行属性name命名组件

<script setup lang="ts" name="User">
# 这里至少有一行注释,否则插件不生效
</script>


Vue3.x中给组件添加name属性

5. 组件的生命周期钩子

  • activated:组件被激活(从缓存中恢复)时调用。
  • deactivated:组件被停用(进入缓存)时调用。
  • 示例:
    <script>
    export default {name: 'Home',activated() {console.log('Home component activated');// 组件从缓存中恢复时,可以重新加载数据或执行其他操作},deactivated() {console.log('Home component deactivated');// 组件被缓存时,执行清理操作}
    };
    </script>
    

6. 处理缓存问题

  1. 缓存更新问题

    • 使用动态 key 强制组件重新渲染而非使用缓存。
    • 示例:
      <template><router-view :key="$route.fullPath" />
      </template>
      
  2. 选择性缓存

    • 使用 includeexclude 精细控制缓存,也可使用 v-if 等手段手动销毁组件。

总结

  • keep-alive 是 Vue 中用于缓存组件的工具,常用于路由组件的缓存。
  • 使用 includeexclude 精细控制哪些组件需要缓存。
  • 使用 activateddeactivated 生命周期钩子处理组件激活和停用时的逻辑。
  • 动态 key 设置可以强制组件重新渲染。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/54498.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

全网最适合入门的面向对象编程教程:41 Python 常用复合数据类型-队列(FIFO、LIFO、优先级队列、双端队列和环形队列)

在 Python 中,队列(Queue)是一种常用的数据结构,用于按照特定的顺序存储和访问数据。队列的主要类型包括先进先出(FIFO)、后进先出(LIFO)、优先级队列、双端队列(Deque)和环形队列,每种队列在不同的应用场景中都有其独特的用途。全网最适合入门的面向对象编程教程:…

基于 INFINI Pizza 为 Hugo 静态站点添加搜索功能

INFINI Pizza 是 INFINI Labs 即将发布的一个基于 Rust 编写的搜索引擎(即将完全开源),目前已经完成基本的搜索能力,并且基于 INFINI Pizza 的核心引擎,提供了一个 WASM 版本的超轻量级内核,可以很方便的嵌入到各类应用系统,比如网站,尤其是静态站点或者小型的博客系统…

VulNyx - Internal

扫描发现有三个端口basic验证需要用户名密码登录访问80端口 \URLFinder 发现有个internal的php文件看看有无任意文件读取漏洞发现没有回显 但是总感觉怪怪的 应该是有啥东西 因为他这里的出现了pre 标签也许他是过滤了../ 我们改成....//试试真的读取到了通过读取passwd发现有个…

财务知识-会计科目

财务知识-会计科目

【JAVA开发】JDBC链接各大数据库(纯代码)

原创 OA圈子在开发中,我们有时候会涉及到链接第三方数据库视图或者中间库,此时我们需要在OA代码中去创建相应的链接工具类,下面我们分享链接工具类的方法: 链接工具类: import com.seeyon.ctp.common.AppContext; import java.sql.*;public class JdbcUtil {private stat…

第2天---RSA基础题型

T1.知pqe求d解m题目: from Crypto.Util.number import *flag = bNSSCTF{******}p = getPrime(512) q = getPrime(512) n = p*q e = 65537 phi = (p-1)*(q-1)m = bytes_to_long(flag)c = pow(m, e, n)print(fp = {p}) print(fq = {q}) print(fe = {e}) print(fc = {c}) p = 105…

带记忆的对话api上线

Link.AI 记忆对话 API原生支持开发者在应用/工作流中设置的记忆功能。开发者无需自行维护上下文记忆并通过messages参数传递,只需传入用户问题和身份标识即可,由系统按用户维度对上下文记忆进行维护,从而实现长期记忆下的多轮对话。API 简介 Link.AI 已为开发者提供了调用智…

devexpress 组件使用研究

1.提示框private void textEdit1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == ( char)Keys.Enter) { AlertControl alert = new AlertControl(); alert.Show(this, "提示", textEdit1.Text, true);} }