vue3 内置组件

请添加图片描述


文章目录

  • 前言
  • 一、过渡效果相关的组件
    • 1、Transition
    • 2、TransitionGroup
  • 二、状态缓存组件(KeepAlive)
  • 三、传送组件(Teleport )
  • 四、异步依赖处理组件(Suspense)


前言

在vue3中 其提供了5个内置组件 Transition 、TransitionGroup 、KeepAlive 、Teleport 、Suspense ,其中 Transition 、TransitionGroup 是用于状态变化的过渡和动画KeepAlive 是用于多个组件间动态切换时缓存被移除的组件实例Teleport
用于将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去Suspense 目前还是实验性功能,是用来在组件树中协调对异步依赖的处理。接下来我们详细介绍每一个组件的用法及应用场景


一、过渡效果相关的组件

1、Transition

Transition 是Vue提供的用于在元素进入和离开DOM时添加动画效果的组件,Transition用于单个元素的过渡效果,可以定义进入和离开时的不同状态

Transition组件的属性

  • name:过渡效果的名称,用于定义对应的CSS类。 appear:是否在初始渲染时应用过渡效果。
  • mode:过渡模式,可以是in-out(默认)、out-in或in-out。
  • enter-class、enter-active-class、enter-to-class:进入过渡时应用的CSS类。
  • leave-class、leave-active-class、leave-to-class:离开过渡时应用的CSS类。

Transition 触发条件

  • 由 v-if 所触发的切换
  • 由 v-show 所触发的切换
  • 由特殊元素 切换的动态组件
  • 改变特殊的 key 属性

以上任意一个条件满足即可触发

Transition组件基于CSS过渡和动画,所以可以使用CSS属性和关键帧来自定义过渡效果。

使用Transition组件的步骤如下:

  1. 导入Transition组件:
import { Transition } from 'vue'
  1. 在模板中使用Transition组件:
<Transition name="fade"><p v-if="show">Hello, Vue 3!</p>
</Transition>

在上面的代码中,name属性指定了过渡效果的名称,v-if指令决定了元素是否在DOM中。

  1. 使用CSS来定义过渡效果:
.fade-enter-active, .fade-leave-active {transition: opacity 0.5s;
}.fade-enter-from, .fade-leave-to {opacity: 0;
}

在上面的代码中,.fade-enter-active.fade-leave-active类分别在元素进入和离开DOM时添加,定义了过渡动画的持续时间和效果。.fade-enter-from.fade-leave-to类分别在元素进入和离开DOM时添加,定义了元素的初始和最终状态。

通过上面的步骤,我们就可以使用Transition组件来实现元素的过渡效果了。需要注意的是,在Vue 3中,name属性不再自动作为CSS类添加到组件上,所以我们需要手动定义类名来完成样式的绑定。

Transition的一些缺点

  1. 对于复杂的动画效果,Transition组件的语法可能会显得有限。它主要适用于一些简单的动画效果,对于复杂的动画效果可能需要使用其他的动画库或自定义实现。
  2. Transition组件对于自定义的过渡效果的支持有限。虽然Vue
    3的Transition组件提供了一些默认的过渡效果,但如果你需要自定义的过渡效果,可能需要编写一些额外的CSS或JavaScript代码来实现。

2、TransitionGroup

TransitionGroup是用来实现在多个元素之间进行过渡动画效果的组件。它可以包裹多个元素,并在这些元素的变化过程中应用过渡效果。TransitionGroup用于多个元素的过渡效果,可以监听元素的插入和删除,并为每个元素应用相应的过渡效果。

TransitionGroup组件的属性

  • tag:包裹元素的标签,默认为span。
  • appear:是否在初始渲染时应用过渡效果。
  • mode:过渡模式,可以是in-out(默认)、out-in或in-out。

<transition-group> 组件在 Vue 中用于在多个元素之间添加过渡效果。

下面是使用 <transition-group> 的基本步骤:

  1. 首先,确保你已经在你的项目中引入了 Vue 和 Vue 的过渡 CSS 文件(如 vue.css 或者 vue.min.css)。

  2. 在你想要添加过渡效果的元素外面包裹一个 <transition-group> 组件,并给它一个唯一的 name 属性。

    <transition-group name="fade"><!-- 这里放置需要添加过渡效果的元素 -->
    </transition-group>
    
  3. <transition-group> 中,可以使用 v-for 循环遍历一个数组或者对象,并为每个元素生成一个需要添加过渡效果的子元素。

    <transition-group name="fade"><div v-for="item in items" :key="item.id"><!-- 这里是每个子元素的内容 --></div>
    </transition-group>
    

    在这个例子中,items 是一个包含子元素信息的数组,每个子元素都有一个唯一的 id

  4. 在 CSS 文件(或者在 <style> 标签中)中,为过渡效果定义对应的类名,并设置相应的样式。

    /* 定义淡入效果的类名 */
    .fade-enter-active, .fade-leave-active {transition: opacity 0.5s;
    }.fade-enter, .fade-leave-to {opacity: 0;
    }
    

    在这个例子中,我们通过设置 opacity 属性来实现淡入淡出的效果。

  5. 在 Vue 的实例中,定义 items 数组,并可以通过添加或者删除数组中的元素来触发过渡效果。

    new Vue({el: '#app',data: {items: [{ id: 1, content: 'Item 1' },{ id: 2, content: 'Item 2' },{ id: 3, content: 'Item 3' }]},methods: {addItem() {this.items.push({ id: this.items.length + 1, content: 'NewItem' });},removeItem(index) {this.items.splice(index, 1);}}
    });
    

    在这个例子中,我们可以通过调用 addItemremoveItem 方法来添加或者删除数组中的元素,从而触发过渡效果。

二、状态缓存组件(KeepAlive)

KeepAlive 是用来来缓存动态组件的。用于缓存需要多次渲染的组件,以提高性能。它会将包裹的子组件全部缓存起来,当组件切换时,会直接从缓存中获取组件而不是重新创建。

要使用KeepAlive组件,首先需要在组件的父组件中包裹KeepAlive标签,然后将需要缓存的子组件放在KeepAlive标签的内部。例如:

<template><div><button @click="toggleComponent">Toggle Component</button><keep-alive><component1 v-if="showComponent1" /><component2 v-else /></keep-alive></div>
</template><script setup>
import Component1 from './Component1.vue'
import Component2 from './Component2.vue'const showComponent1=ref(true)const toggleComponent=()=>{showComponent1.value=!showComponent1.value
}
</script>

在上面的例子中,使用了一个按钮来切换两个子组件Component1和Component2的显示。当点击按钮时,切换显示不同的子组件。由于包裹了KeepAlive标签,所以每次切换组件时,组件的状态会被缓存,以便在下次显示时保留。

需要注意的是,在使用KeepAlive组件时,动态组件的切换需要使用v-if和v-else来实现,而不是使用v-show。这是因为KeepAlive会根据组件的实例来判断是否需要缓存组件的状态,而v-show只是简单地切换组件的显示和隐藏,并不会销毁和重建组件的实例。

使用KeepAlive还可以通过设置include和exclude属性来控制哪些组件需要缓存,以及哪些组件不需要缓存。例如:

<keep-alive :include="[Component1, 'component2']" :exclude="['component3']"><component1 /><component2 /><component3 />
</keep-alive>

上面的例子中,设置了include属性为[Component1, ‘component2’],意味着只缓存Component1和component2组件的状态;同时设置了exclude属性为[‘component3’],意味着不缓存component3组件的状态。

以上就是在Vue 3中使用KeepAlive组件的简单介绍和使用方式。使用KeepAlive可以提高组件的性能,特别是对于一些需要频繁切换的组件,可以显著减少组件的重渲染次数,提高页面的响应速度。

三、传送组件(Teleport )

Teleport 是一个新的特性,它可以让你将组件的内容渲染到 DOM 结构中的任意位置,而不一定是组件所在的父组件。

使用 Teleport 的步骤如下:

  1. 在你需要渲染 Teleport 的组件上引入 teleport 函数: import { createApp, h, teleport } from 'vue';
  2. 在组件的 setup 方法中调用 teleport 函数来创建一个 Teleport 组件实例,例如:const teleportTarget = teleport()
  3. 在模板中使用 <teleport> 标签包裹需要渲染的内容,并使用 to 属性来指定渲染到哪个目标位置,例如:<teleport to="my-target">...</teleport>
  4. 在需要渲染 Teleport 的位置上添加一个具有相同 id 的元素,例如:<div id="my-target"></div>
  5. 在 Teleport 的目标位置上使用 teleportTarget 实例来渲染,例如:teleportTarget.mount('#my-target')

完整的示例代码如下:

<template><div><button @click="showModal = true">打开模态框</button><teleport to="my-target"><Modal v-if="showModal" @close="showModal = false"/></teleport></div>
</template><script setup>
import { defineComponent, h, teleport } from 'vue';
import Modal from './Modal.vue';const teleportTarget = teleport();const showModal = ref(false);teleportTarget.mount('#my-target');
</script>

在上面的示例中,点击按钮会打开一个模态框,模态框的内容会被渲染到 id 为 my-target 的元素中。

四、异步依赖处理组件(Suspense)

Suspense组件是用来来处理异步组件的加载和错误处理。

使用<Suspense>组件包裹异步加载的组件,如下所示:

<template><div><Suspense><template #default><AsyncComponent /></template><template #fallback><div>Loading...</div></template></Suspense></div>
</template><script setup>
import { defineAsyncComponent, Suspense } from 'vue';const AsyncComponent = defineAsyncComponent(() =>import('./AsyncComponent.vue')
);</script>

在这个例子中,Suspense组件包裹了异步加载的组件AsyncComponent<template #fallback>标签中的内容会在异步组件加载期间显示,直到异步组件加载完成。

需要注意的是,在Vue 3中,异步组件的默认导出方式发生了变化,你需要使用defineAsyncComponent()函数来定义异步组件。

当异步组件加载完成后,它将会渲染在<template #default>标签中的内容。

此外,你还可以使用<Suspense>组件的error事件来处理异步组件加载失败的情况,如下所示:

<template><div><Suspense @error="handleError"><template #default><AsyncComponent /></template><template #fallback><div>Loading...</div></template></Suspense></div>
</template><script setup>
import { defineAsyncComponent, Suspense } from 'vue';const AsyncComponent = defineAsyncComponent(() =>import('./AsyncComponent.vue')
);const handleError = (error) = > {console.error('Failed to load async component:', error);
}
</script>

在这个例子中,<Suspense>组件的error事件会触发handleError方法,你可以在这个方法中处理异步组件加载失败的情况。在这个例子中,我们简单地将错误打印到控制台。

这样就是使用<Suspense>组件处理异步组件加载和错误处理的方法啦!希望对你有所帮助!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

antv/x6_2.0学习使用(四、边)

一、添加边 节点和边都有共同的基类 Cell&#xff0c;除了从 Cell 继承属性外&#xff0c;还支持以下选项。 属性名类型默认值描述sourceTerminalData-源节点或起始点targetTerminalData-目标节点或目标点verticesPoint.PointLike[]-路径点routerRouterData-路由connectorCon…

猫咪吃哪种猫粮好?主食冻干猫粮哪种性价比高

由于猫咪是肉食动物&#xff0c;对蛋白质的需求很高&#xff0c;如果摄入的蛋白质不足&#xff0c;就会影响猫咪的成长。而冻干猫粮本身因为制作工艺的原因&#xff0c;能保留原有的营养成分和营养元素&#xff0c;所以冻干猫粮蛋白含量比较高&#xff0c;营养又高&#xff0c;…

第二十七周:文献阅读笔记

第二十七周&#xff1a;文献阅读笔记 摘要AbstractDenseNet 网络1. 文献摘要2. 引言3. ResNets4. Dense Block5. Pooling layers6. Implementation Details7. Experiments8. Feature Reuse9. 代码实现 总结 摘要 DenseNet&#xff08;密集连接网络&#xff09;是一种深度学习神…

工智能基础知识总结--词嵌入之FastText

什么是FastText FastText是Facebook于2016年开源的一个词向量计算和文本分类工具,它提出了子词嵌入的方法,试图在词嵌入向量中引入构词信息。一般情况下,使用fastText进行文本分类的同时也会产生词的embedding,即embedding是fastText分类的产物。 FastText流程 FastText的架…

计算机组成原理简答题

目录 1、指令和数据在计算机内部以几进制存储&#xff0c;又是如何区分的呢&#xff1f; 2、计算机内部为什么要使用二进制&#xff1f; 3、简单描述计算机系统的层次结构 4、DRAM为什么要进行刷新&#xff0c;如何刷新的&#xff1f; 5、简述不同操作码的指令格式&#xf…

FileStream文件管理

文件管理 FileStream&#xff1a;是一个用于读写文件的一个类。它提供了基于流的方式操作文件&#xff0c;可以进行读取、写入、查找和关闭等操作。 第一个参数&#xff1a;path&#xff08;路径&#xff09; 相对路径&#xff1a;相对于当前项目的bin目录下的Debug和Realse来…

[嵌入式AI从0开始到入土]10_yolov5在昇腾上应用

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第一章 昇腾Altas 200 DK上手 第二章 下载昇腾案例并运行 第三章…

【AI视野·今日NLP 自然语言处理论文速览 第七十一期】Fri, 5 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Fri, 5 Jan 2024 Totally 28 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers LLaMA Pro: Progressive LLaMA with Block Expansion Authors Chengyue Wu, Yukang Gan, Yixiao Ge, Zeyu Lu, …

java导出word套打

这篇文档手把手教你完成导出word套打&#xff0c;有这个demo&#xff0c;其他word套打导出都通用。 1、主要依赖 <!--hutool--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.0</ve…

IPv6路由协议---IPv6动态路由(RIPng)

IPv6动态路由协议 动态路由协议有自己的路由算法,能够自动适应网络拓扑的变化,适用于具有一定数量三层设备的网络。缺点是配置对用户要求比较高,对系统的要求高于静态路由,并将占用一定的网络资源和系统资源。 路由表和FIB表 路由器转发数据包的关键是路由表和FIB表,每…

CreateDIBSection失败的问题记录

错误记录 [ERROR] (:0, ): QPixmap::fromWinHICON(), failed to GetIconInfo() (操作成功完成。) [ERROR] (:0, ): QPixmap::fromWinHICON(), failed to GetIconInfo() (参数错误。) [ERROR] (:0, ): QPixmap::fromWinHICON(), failed to GetIconInfo() (参数错误。) [ERROR] …

升级 Vite 5 出现警告 The CJS build of Vite‘s Node API is deprecated.

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

数仓建设学习路线(一)

前言 数仓建设实践路线是语兴发布在B站的系列课程&#xff0c;搜索语兴呀即可学习完整的数仓建设理论。 大数据相关岗位 大数据常见的岗位主要包括实时开发、数据治理、数据安全、数据资产等。 其中&#xff1a; 实时开发组的主要任务是实时可视化制作(大屏/彩蛋/战报&…

前端结合MQTT实现连接 订阅发送信息等操作 VUE3

MQTT客户端下载 使用测试 在我之前文章中 MQTT下载基础使用 下面记录一下前端使用的话的操作 1.安装 npm i mqtt引入 import * as mqtt from "mqtt/dist/mqtt.min"; //VUE3 import mqtt from mqtt //VUE2 一、MQTT协议中的方法 Connect。等待与服务器建立连接…

[VUE]2-vue的基本使用

目录 vue基本使用方式 1、vue 组件 2、文本插值 3、属性绑定 4、事件绑定 5、双向绑定 6、条件渲染 7、axios 8、⭐跨域问题 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅…

气膜建筑:舒适、智能、可持续

气膜建筑之所以能够拥有广阔的发展空间&#xff0c;源于其融合了诸多优势特点&#xff0c;使其成为未来建筑领域的前沿趋势。 气膜建筑注重环境可持续性和能源效率。在材料和设计上&#xff0c;它采用可回收材料、提高热保温效果&#xff0c;并积极利用太阳能等可再生能源&…

【洛谷学习自留】p9226 糖果

解题思路&#xff1a; 简单的计算题&#xff0c;用n对k取余&#xff0c;如果余数为0&#xff0c;则输出k的值&#xff0c;否则输出&#xff08;k-余数&#xff09;的值。 代码实现&#xff1a; import java.util.Scanner;public class p9226 {public static void main(Strin…

【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于QuickRNet的TPU超分模型部署

2023 CCF 大数据与计算智能大赛 《赛题名称》 基于QuickRNet的TPU超分模型部署 巴黎欧莱雅 林松 智能应用业务部算法工程师 中信科移动 中国-北京 gpu163.com 团队简介 巴黎欧莱雅团队包含一个队长和零个队员。 队长林松&#xff0c;研究生学历&#xff0c;2019-202…

【一份老网工珍藏多年的网络配置笔记,很重要!】

01、交换机、路由器的几种配置模式及模式转换 1. 用户模式 登录到交换机&#xff08;路由器&#xff09;时会自动进入用户模式&#xff0c;提示符为 switchname>。在该模式下只能够查看相关信息&#xff0c; 对 IOS的运行不产生任何影响。 2. 特权模式 用户模式下&#xff…

精进单元测试技能 —— Pytest断言的艺术!

本篇文章主要是阐述Pytest在断言方面的应用。让大家能够了解和掌握Pytest针对断言设计了多种功能以适应在不同测试场景上使用。 了解断言的基础 在Pytest中&#xff0c;断言是通过 assert 语句来实现的。简单的断言通常用于验证预期值和实际值是否相等&#xff0c;例如&#…