Vue3从入门到实践:深度了解新组件

1.Teleport

概念:Teleport(传送门)是一个新的特性,用于在DOM中的任意位置渲染组件。它允许你将组件的内容渲染到DOM中的另一个位置,而不受组件层次结构的限制。

下面举出例子解释: 

1.新建App.vue文件作为父组件

解析:这段代码的作用是创建一个外层容器,显示一个标题、一张图片,并包含一个自定义的模态框组件。 

 2.新建Modal.vue作为子组件

解析:这段代码是一个简单的Vue单文件组件,用于实现一个点击按钮展示模态框的功能。

展示:

 

点击”展示窗口后“ 按钮后

这样看,你可能会认为窗口以父元素为参考,其实不然,而是整个视口

所以给你修改了一下窗口样式,使其更明显些

3. 此时我在父组件Css属性添加一个关于饱和度(filter)的属性

4. 然后再点击”展示窗口“,你会发现窗口不能再参考视口了,而是父元素容器了。

提醒:这里父元素和窗口是包裹关系(父子组件嘛)

所以这里强调的是父组件的某些属性会影响了窗口的(position: fixed),这时候可以引用Teleport了

5.在Modal.vue将模块放入到Teleport中

解析:以上代码使用了<teleport>元素将弹窗的内容传送到body元素中,使其在DOM结构中脱离当前组件的范围,可以在任何位置显示。

所以Teleport可以将子容器的div传送到指定的容器里面,同时里面的逻辑不影响,只是结构放出去了。所以你可以将Teleport称之为”传送门“ 

App.vue代码:

<template><div class="outer"><h2>我是App组件</h2><img src="http://www.atguigu.com/images/index_new/logo.png" alt=""><br><Modal/></div></template><script setup lang="ts" name="App">import Modal from "./Modal.vue";</script><style>.outer{background-color: #ddd;border-radius: 10px; padding: 5px;box-shadow: 0 0 10px;width: 400px;height: 400px;filter: saturate(200%);}img {width: 270px;}</style>

 Modal.vue代码:

<template><button @click="isShow = true">展示弹窗</button><teleport to='body'><div class="modal" v-show="isShow"><h2>我是弹窗的标题</h2><p>我是弹窗的内容</p><button @click="isShow = false">关闭弹窗</button></div></teleport>
</template><script setup lang="ts" name="Modal">import {ref} from 'vue'let isShow = ref(false)
</script><style scoped>.modal {width: 200px;height: 150px;background-color: skyblue;border-radius: 10px;padding: 5px;box-shadow: 0 0 5px;text-align: center;position: fixed;left: 50%;top: 20px;margin-left: -100px;}
</style>


2. Suspense 

 概念:

当我们在Vue 3中使用Suspense(悬挂)时,我们可以处理异步组件的加载状态和错误处理,以提供更好的用户体验。

想象一下,当一个组件需要一些时间来加载时,我们可以使用Suspense来展示一个等待状态,比如显示一个加载指示器或一个骨架屏,告诉用户正在加载中。一旦组件加载完成,它会被正常地显示出来。

另一方面,如果加载出现错误,Suspense可以帮助我们捕获这些错误并展示错误信息或备用内容。

所以,Suspense提供了一种在异步组件加载过程中处理加载状态和错误的方式,以确保用户能够知道正在发生的情况,并提供适当的反馈。通过使用Suspense,我们可以创建更流畅和友好的用户界面,提升用户体验。

 

  • 等待异步组件时渲染一些额外内容,让应用有更好的用户体验

  • 使用步骤:

    • 异步引入组件

    • 使用Suspense包裹组件,并配置好defaultfallback

import { defineAsyncComponent,Suspense } from "vue";
const Child = defineAsyncComponent(()=>import('./Child.vue'))

新建App.vue文件 

新建Child.vue文件:

在以上代码中,使用了await关键字来等待axios库发送GET请求并获取响应结果。这是因为发送网络请求是一个异步操作,需要等待服务器返回响应后才能获取到数据。

使用await关键字可以暂停代码的执行,直到异步操作完成并返回结果。在这个例子中,await关键字用于等待axios库发送GET请求并获取到服务器的响应结果。

通过使用await,可以确保在继续执行后续代码之前,已经获取到了API返回的数据。这样可以避免在数据还未返回时对未定义的数据进行操作。

 为什么呢?

在Vue的模板渲染过程中,当数据发生变化时,Vue会重新渲染模板以反映最新的数据状态。然而,在这段代码中,由于异步操作在初始化时就被执行,并且直接修改了sum的值,这会触发组件的重新渲染。

由于异步操作的执行时间是不确定的,可能会在组件的初始化阶段之后才完成,所以在组件初始化时,sum的初始值被渲染到模板中。然而,当异步操作完成后,sum的值被修改,导致组件重新渲染,此时没有提供标题的相关模板,因此导致标题消失。

如何解决呢?

 

在你提供的代码中,使用了<Suspense>组件来包裹异步加载的子组件<Child/>

<template v-slot:default>中,放置了实际的异步组件<Child/>。这表示在异步组件加载完成后,将显示<Child/>组件的内容。

<template v-slot:fallback>是一个占位内容,用于在子组件加载过程中显示。

你可以在这里放置一个加载状态的提示文本,例如<h2>加载中......</h2>。这段代码会在子组件加载完成之前显示,并在加载完成后被替换为<Child/>组件的内容。

通过使用<Suspense>组件和插槽(slot)的方式,你可以在异步加载的过程中提供一个加载状态的占位内容,以提升用户体验并避免页面显示空白。

  App.vue代码:

<template><div class="app"><h2>我是App组件</h2><Suspense><template v-slot:default><Child/></template><template v-slot:fallback><h2>加载中......</h2> </template></Suspense></div>
</template>
<script setup lang="ts" name="App">import {Suspense} from 'vue'import Child from './Child.vue'
</script><style>.app {background-color: #ddd;border-radius: 10px;padding: 10px;box-shadow: 0 0 10px;}
</style>

Child.vue代码:

<template><div class="child"><h2>我是Child组件</h2><h3>当前求和为:{{ sum }}</h3></div>
</template><script setup lang="ts">import {ref} from 'vue'import axios from 'axios'let sum = ref(0)let {data:{content}} = await axios.get('https://api.uomg.com/api/rand.qinghua?format=json')console.log(content)</script><style scoped>.child {background-color: skyblue;border-radius: 10px;padding: 10px;box-shadow: 0 0 10px;}
</style>

3.全局API转移到应用对象

概念:

在Vue 3中,许多全局API的使用方式有所变化。以前,你可能会在Vue构造函数上调用这些API,但现在你需要使用应用对象来访问它们。

想象一下,Vue应用程序就像是一个实际的应用。在Vue 2中,你可以直接从"Vue"这个大总管那里获取所有的全局功能,就像向一个人提出请求一样。但在Vue 3中,这些功能被放在了应用对象中,就像是应用程序的各个部分,你需要通过应用对象来访问它们。

简而言之:以前需要Vue.xxx ,现在只需要app.xxx,时代变了,哥们。

app.component表示可以在全局使用的组件

1.现在创建一个组件:Hello.vue

2.在main.ts引用导入

3. 现在已经作为全局变量了,现在直接在两个组件中使用

 

展示: 


app.config: 用于访问应用程序的全局配置对象。它提供了一种设置和访问全局配置选项的方式。

比如下面使用app.config.globalProperties可变为全局属性

1.在main.ts引入

2.可以使用了,比如我在两个其他组件使用 

 有报错,是我的编译器问题,可不必理会。

3.展示


app.directive:用于注册全局指令。


app.mount:是Vue.js中用于将应用程序挂载到特定元素上的方法 

app.unmount:卸载特定元素上的方法  

2s后整个页面卸载 


app.use :用于安装插件,常用的有路由器(Router)或者状态管理器(Pinia)


4.vue3的部分非兼容性改变

概念:其实就是Vue3的部分规则,在Vue2中不能这样写了。

  • 过渡类名 v-enter 修改为 v-enter-from、过渡类名 v-leave 修改为 v-leave-from

  • keyCode 作为 v-on 修饰符的支持。

  • v-model 指令在组件上的使用已经被重新设计,替换掉了 v-bind.sync。

  • v-ifv-for 在同一个元素身上使用时的优先级发生了变化。

  • 移除了$on$off$once 实例方法。

  • 移除了过滤器 filter

  • 移除了$children 实例 propert

建议去看官网,这是面试常问到的。 


总结:

  1. Teleport(传送门)是Vue 3中的一个新特性,它允许你将组件的内容渲染到DOM中的任意位置,而不受组件层次结构的限制。通过使用<teleport>元素和to属性,你可以将组件的内容传送到指定的DOM元素中,从而实现灵活的渲染位置。

  2. Suspense(悬挂)是Vue 3中用于处理异步组件加载状态和错误处理的特性。它允许你在异步组件加载过程中展示等待状态(如加载指示器或骨架屏),并处理加载错误。通过使用<Suspense>组件,你可以提供更好的用户体验,确保用户在等待加载时能够获得适当的反馈。

  3. 在Vue 3中,许多全局API已经从Vue构造函数转移到应用对象上。这是为了提供更模块化和可配置的应用程序结构。原先通过Vue.directiveVue.mixin等方式注册全局指令、混入等,现在需要使用应用对象(通过createApp函数创建)上的方法进行注册,例如app.directiveapp.mixin等。

  4. Vue 3引入了一些非兼容性的改变,这意味着在从Vue 2升级到Vue 3时,一些代码可能需要进行修改才能正常工作。其中一些改变包括更严格的模板编译、Composition API的引入、组件实例属性的更改等。为了平滑升级到Vue 3,官方提供了一些工具和指南,帮助开发者进行代码迁移和适配。需要仔细阅读Vue 3的官方文档和迁移指南,以了解这些非兼容性的改变并相应地修改代码。

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

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

相关文章

RACE IPEMD:构建安全基石的密码学原理与实践

title: RACE IPEMD&#xff1a;构建安全基石的密码学原理与实践 date: 2024/4/16 16:53:56 updated: 2024/4/16 16:53:56 tags: IPEMD哈希算法SHA-1SHA-2/3消息摘要数字签名安全分析 前言 在当今信息爆炸的时代&#xff0c;数据安全和隐私保护变得尤为重要。密码学作为信息安…

计算机视觉——基于OpenCV和Python进行模板匹配

模板匹配&#xff1f; 模板匹配是它允许在一幅较大的图像中寻找是否存在一个较小的、预定义的模板图像。这项技术的应用非常广泛&#xff0c;包括但不限于图像识别、目标跟踪和场景理解等。 目标和原理 模板匹配的主要目标是在一幅大图像中定位一个或多个与模板图像相匹配的…

最小生成树算法的实现c++

最小生成树算法的实现c 题目链接&#xff1a;1584. 连接所有点的最小费用 - 力扣&#xff08;LeetCode&#xff09; 主要思路&#xff1a;使用krusal算法&#xff0c;将边的权值进行排序&#xff08;从小到大排序&#xff09;&#xff0c;每次将权值最小且未加入到连通分量中…

Cesium中实现镜头光晕

镜头光晕 镜头光晕 (Lens Flares) 是模拟相机镜头内的折射光线的效果&#xff0c;主要作用就是让太阳光/其他光源更加真实&#xff0c;和为您的场景多增添一些气氛。 Cesium 中实现 其实 Cesium 里面也是有实现一个镜头光晕效果的&#xff0c;添加方式如下&#xff0c;只是效…

Python教学入门:数字类型与字符串

字符串元素组成的序列 字符串元素组成的序列指的是字符串中的每个字符按照一定的顺序排列形成的序列。在 Python 中&#xff0c;字符串是由字符组成的有序序列&#xff08;Sequence&#xff09;&#xff0c;每个字符在字符串中有其固定的位置&#xff08;索引&#xff09;&…

Android RecyclerView的LayoutManager配置

RecyclerView的item布局方式依赖于其配置的布局管理器。不同的布局管理器可以实现不同的界面效果。 LayoutManager介绍 RecyclerView可以通过setLayoutManager设置布局管理器&#xff0c;该方法的源码如下&#xff1a; /*** Set the {link LayoutManager} that this RecyclerV…

java网络编程 BufferedReader的readLine方法读不到数据且一直阻塞

最近在整理Java IO相关内容&#xff0c;会遇到一些以前没有注意的问题&#xff0c;特此记录&#xff0c;以供自查和交流。 需求&#xff1a; 基于Java的BIO API&#xff0c;实现简单的客户端和服务端通信模型&#xff0c;客户端使用BufferedReader的readLine方法读取System.i…

ASPICE 追溯性实践分享

01前言 接着之前的分享&#xff0c;遗留的追溯性ASPICE 认证实践及个人理解分享-CSDN博客文章浏览阅读961次&#xff0c;点赞22次&#xff0c;收藏17次。ASPICE是Automotive 和SPICE的组合&#xff0c;全英文为&#xff08;Automotive Software ProcessImprovement and Determ…

C++修炼之路之继承<二>

目录 一&#xff1a;子类的六大默认成员函数 二&#xff1a;继承与友元 三&#xff1a;继承与静态成员 四&#xff1a;复杂的继承关系菱形继承菱形虚拟继承 1.单继承 2.多继承 3.菱形继承&#xff1b;一种特殊的多继承 4.菱形虚拟继承 5.虚拟继承解决数据冗余和二…

小程序 前端如何用wx.request获取 access_token接口调用凭据

在微信小程序中,获取access_token通常是通过wx.request方法来实现的。以下是一个简单的示例代码: 1.获取小程序的appID 与 secret(小程序密钥) 登录之后,请点击左侧的"开发管理"==>点击"开发设置" 就可以找到 2. 在javascript 中的代码: // 定…

性能优化工具

CPU 优化的各类工具 network netperf 服务端&#xff1a; $ netserver Starting netserver with host IN(6)ADDR_ANY port 12865 and family AF_UNSPEC$ cat netperf.sh #!/bin/bash count$1 for ((i1;i<count;i)) doecho "Instance:$i-------"# 下方命令可以…

算法刷题记录2

4.图 4.1.被围绕的区域 思路&#xff1a;图中只有与边界上联通的O才不算是被X包围。因此本题就是从边界上的O开始递归&#xff0c;找与边界O联通的O&#xff0c;并标记为#&#xff08;代表已遍历&#xff09;&#xff0c;最后图中剩下的O就是&#xff1a;被X包围的O。图中所有…

温湿度传感器(DHT11)以及光照强度传感器(BH1750)的使用

前言 对于一些单片机类的环境检测或者智能家居小项目中&#xff0c;温湿度传感器&#xff08;DHT11&#xff09;以及光照强度传感器&#xff08;BH1750&#xff09;往往是必不可少的两个外设&#xff0c;下面我们来剖析这两个外设的原理&#xff0c;以及使用。 1. 温湿度传感…

嵌入式4-18

做一个简单数据库终端操作系统 #include <myhead.h> int main(int argc, const char *argv[]) {int id;char name[16];float score;sqlite3 *pNULL;if(sqlite3_open("./my.db",&p)!SQLITE_OK){printf("sqlite3_open error\n");return -1;} …

python中中英文打印对齐解决方案

在python中&#xff0c;有时候会出现中英文混合输出的情形&#xff0c;但是由于中文默认是全角格式&#xff08;一个中文字符占用两个字符宽度&#xff09;&#xff0c;这会对python原生的print函数带来一些障碍。尤其是用户用print对齐输出的时候&#xff0c;这种差异会导致文…

顺序表链表经典算法题

1.链表反转 typedef struct ListNode listnode; struct ListNode* reverseList(struct ListNode* head) {if(head NULL){return head;}listnode* p1 NULL;listnode* p2 head;listnode* p3 head->next;while(p2){p2->next p1;p1 p2;p2 p3;if(p3)p3 p3->next;}…

ASP.NET MVC企业级程序设计 (商品管理:小计,总计,删除,排序)

目录 效果图 实现过程 1创建数据库 2创建项目文件 3创建控制器&#xff0c;右键添加&#xff0c;控制器 ​编辑 注意这里要写Home​编辑 创建成功 数据模型创建过程之前作品有具体过程​编辑 4创建DAL 5创建BLL 6创建视图&#xff0c;右键添加视图 ​编辑 7HomeCont…

ST-GCN模型详解(+openpose)

ST-GCN模型详解&#xff08;openpose&#xff09; 一、什么是ST-GCN呢 基于骨架的动作识别&#xff08;Skeleton-Based Action Recognition&#xff09;主要任务是从一系列时间连续的骨骼关键点&#xff08;2D/3D&#xff09;中识别出正在执行的动作。因为牵涉到骨骼框架这种…

智慧公厕解决方案易集成好使用的智能硬件

在现代城市建设中&#xff0c;智慧公厕的需求日益增长。为了提供更好的用户体验和更高效的管理&#xff0c;易集成、好使用的智能硬件成为智慧公厕解决方案的关键组成部分。 1. 蹲位有人无人感应器&#xff1a;是用于检测厕位有人无人的设备&#xff0c;根据现场不同的安装条件…

Flask前端页面文本框展示后端变量,路由函数内外两类

一、外&#xff01;路由函数外的前后端数据传输 Flask后端 ↓ 首先导入包&#xff0c;需要使用 后端&#xff1a;flask_socketio来进行路由外的数据传输&#xff0c; from flask_socketio import SocketIO, emit 前端&#xff1a;还有HTML头文件的设置。 <!DOCTYPE …