vue3 基础知识 (动态组件 keep-alive 等) 03

嘿,happy

文章目录


一、动态组件

动态组件是使用 component 组件,通过一个特殊的属性 is 来实现

  1. 一定是注册好的组件
  2. 我们需要将属性和监听事件放到 component 上来使用
javascript 复制代码
<template>
  <div>
    <button v-for="tab in tabs" 
            :key="tab"
            :class="{active: currentTab === tab}"
            @click="tabClick(tab)">
      {{tab}}
    </button>

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

<script>
  import Home from "./pages/Home.vue";
  import About from "./pages/About.vue";
  import Category from "./pages/Category.vue";

  export default {
    components: {
      Home, About, Category
    },
    data() {
      return {
        tabs: ["home", "about", "category"],
        currentTab: "home"
      }
    },
    methods: {
      tabClick(tab) {
        this.currentTab = tab;
      },
    }
  }
</script>

<style scoped>
  .active {
    color: red;
  }
</style>

二、keep-alive

  • keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。
  • 和 transition 相似,keep-alive 是一个抽象组件:它自身不会渲染成一个 DOM 元素,也不会出现在父组件链中。

作用: 在组件切换过程中将状态保留在内存中,防止重复渲染DOM,减少加载时间及性能消耗,提高用户体验性。

原理:

在 created 函数调用时将需要缓存的 VNode 节点保存在 this.cache 中/在 render(页面渲染) 时,如果 VNode 的 name 符合缓存条件(可以用 include 以及 exclude 控制),则会从 this.cache 中取出之前缓存的 VNode 实例进行渲染。

keep-alive有一些属性 :

  1. include 只有 名称匹配的组件会被缓存
  2. exclude 任何名称匹配的组件都不会被缓存
  3. max 最多可以缓存多少组件实例,一旦达到这个数字,那么缓存组件中最近没有被访问的实例会被销毁;
  4. include 和 exclude prop 允许组件有条件地缓存

二者都可以用逗号分隔字符串、正则表达式或一个数组来表示

  • 匹配首先检查组件自身的 name 选项;
  • 如果 name 选项不可用,则匹配它的局部注册名称 (父组件 components 选项的键值)
javascript 复制代码
 // 逗号分隔字符串
<keep-alive include="a,b">
  <component :is="view"></component>
</keep-alive>

// regex (使用 `v-bind`) -->
<keep-alive :include="/a|b/">
  <component :is="view"></component>
</keep-alive>

// Array (使用 `v-bind`) 
<keep-alive :include="['a', 'b']">
  <component :is="view"></component>
</keep-alive>
相关推荐
摸鱼仙人~8 分钟前
React forwardRef 与 useImperativeHandle 深度解析
前端·javascript·react.js
袁煦丞35 分钟前
在线PPT编辑利器PPTist:cpolar内网穿透实验室第650个成功挑战
前端·程序员·远程工作
周尛先森37 分钟前
Next.js 渲染策略及其对核心网络指标的影响
前端
掘金安东尼40 分钟前
9 个【宝藏工具】精选,大幅提升效率与灵感!
前端·面试·github
天生我材必有用_吴用42 分钟前
Three.js开发必备:层级模型详解
前端
村头的猫1 小时前
如何通过 noindex 阻止网页被搜索引擎编入索引?
前端·经验分享·笔记·搜索引擎
oil欧哟1 小时前
🙂我用 TS 实现了一个 OpenAPI 转 MCP 工具,让 AI 工具调用更简单!
前端·人工智能·mcp
JohnYan1 小时前
Bun技术评估 - 10 Testing
javascript·后端·bun
YYsuni1 小时前
Google Translate 导致的 React 页面崩溃
前端
会一丢丢蝶泳的咻狗1 小时前
uni-app安卓端强制更新apk包
android·前端·uni-app