Vue3【Composition API 的优势、新的组件(Fragment、Teleport、Suspense)、全局API的转移】

news2024/12/23 0:13:43

文章目录

  • 四、Composition API 的优势
    • 1.Options API 存在的问题
    • 2.Composition API 的优势
  • 五、新的组件
    • 1.Fragment
    • 2.Teleport
    • 3.Suspense
  • 六、其他
    • 1.全局API的转移
    • 2.其他改变


四、Composition API 的优势

1.Options API 存在的问题

使用传统OptionsAPI中,新增或者修改一个需求,就需要分别在data,methods,computed里修改 。

在这里插入图片描述

2.Composition API 的优势

我们可以更加优雅的组织我们的代码,函数。让相关功能的代码更加有序的组织在一起。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

五、新的组件

1.Fragment

  • 在Vue2中: 组件必须有一个根标签
  • 在Vue3中: 组件可以没有根标签, 内部会将多个标签包含在一个Fragment虚拟元素中
  • 好处: 减少标签层级, 减小内存占用

2.Teleport

  • 什么是Teleport?—— Teleport 是一种能够将我们的组件html结构移动到指定位置的技术。

    <teleport to="移动位置">
    	<div v-if="isShow" class="mask">
    		<div class="dialog">
    			<h3>我是一个弹窗</h3>
    			<button @click="isShow = false">关闭弹窗</button>
    		</div>
    	</div>
    </teleport>
    

用之前效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码实现:
在这里插入图片描述

App.vue
<template>
	<div class="app">
		<h3>我是App组件</h3>
		<Child/>
	</div>
</template>

<script>
	import Child from './components/Child'
	export default {
		name:'App',
		components:{Child},
	}
</script>

<style>
	.app{
		background-color: gray;
		padding: 10px;
	}
</style>
Child.vue
<template>
	<div class="child">
		<h3>我是Child组件</h3>
		<Son/>
	</div>
</template>

<script>
	import Son from './Son'
	export default {
		name:'Child',
		components:{Son},
	}
</script>

<style>
	.child{
		background-color: skyblue;
		padding: 10px;
	}
</style>
Son.vue
<template>
	<div class="son">
		<h3>我是Son组件</h3>
		<Dialog/>
	</div>
</template>

<script>
	import Dialog from './Dialog.vue'
	export default {
		name:'Son',
		components:{Dialog}
	}
</script>

<style>
	.son{
		background-color: orange;
		padding: 10px;
	}
</style>
Dialog.vue
<template>
	<div>
		<button @click="isShow = true">点我弹个窗</button>
		<teleport to="body">
			<div v-if="isShow" class="mask">
				<div class="dialog">
					<h3>我是一个弹窗</h3>
					<h4>一些内容</h4>
					<h4>一些内容</h4>
					<h4>一些内容</h4>
					<button @click="isShow = false">关闭弹窗</button>
				</div>
			</div>
		</teleport>
	</div>
</template>

<script>
	import {ref} from 'vue'
	export default {
		name:'Dialog',
		setup(){
			let isShow = ref(false)
			return {isShow}
		}
	}
</script>

<style>
	.mask{
		position: absolute;
		top: 0;bottom: 0;left: 0;right: 0;
		background-color: rgba(0, 0, 0, 0.5);
	}
	.dialog{
		position: absolute;
		top: 50%;
		left: 50%;
		transform: translate(-50%,-50%);
		text-align: center;
		width: 300px;
		height: 300px;
		background-color: green;
	}
</style>

用之后效果:
在这里插入图片描述
在这里插入图片描述

3.Suspense

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

  • 使用步骤:

    • 异步引入组件

      import {defineAsyncComponent} from 'vue'
      const Child = defineAsyncComponent(()=>import('./components/Child.vue'))
      
    • 使用Suspense包裹组件,并配置好defaultfallback

      <template>
      	<div class="app">
      		<h3>我是App组件</h3>
      		<Suspense>
      			<template v-slot:default>
      				<Child/>
      			</template>
      			<template v-slot:fallback>
      				<h3>加载中.....</h3>
      			</template>
      		</Suspense>
      	</div>
      </template>
      
App.vue
<template>
	<div class="app">
		<h3>我是App组件</h3>
		<Suspense>
			<template v-slot:default>
				<Child/>
			</template>
			<template v-slot:fallback>
				<h3>稍等,加载中...</h3>
			</template>
		</Suspense>
	</div>
</template>

<script>
	// import Child from './components/Child'//静态引入,组件同时出现。只要没有成功,就不渲染
	import {defineAsyncComponent} from 'vue' 
	const Child = defineAsyncComponent(()=>import('./components/Child')) //异步引入,App先出,Child后出。Suspense可解决显示效果不好,添加插槽
	export default {
		name:'App',
		components:{Child},
	}
</script>

<style>
	.app{
		background-color: gray;
		padding: 10px;
	}
</style>
Child.vue
<template>
	<div class="child">
		<h3>我是Child组件</h3>
		{{sum}}
	</div>
</template>

<script>
	import {ref} from 'vue'
	export default {
		name:'Child',
		async setup(){
			let sum = ref(0)
			let p = new Promise((resolve,reject)=>{
				setTimeout(()=>{
					resolve({sum})
				},3000)
			})
			return await p
		}
	}
</script>

<style>
	.child{
		background-color: skyblue;
		padding: 10px;
	}
</style>

在这里插入图片描述

六、其他

1.全局API的转移

  • Vue 2.x 有许多全局 API 和配置。

    • 例如:注册全局组件、注册全局指令等。

      //注册全局组件
      Vue.component('MyButton', {
        data: () => ({
          count: 0
        }),
        template: '<button @click="count++">Clicked {{ count }} times.</button>'
      })
      
      //注册全局指令
      Vue.directive('focus', {
        inserted: el => el.focus()
      }
      
  • Vue3.0中对这些API做出了调整:

    • 将全局的API,即:Vue.xxx调整到应用实例(app)上

      2.x 全局 API(Vue3.x 实例 API (app)
      Vue.config.xxxxapp.config.xxxx
      Vue.config.productionTip移除
      Vue.componentapp.component
      Vue.directiveapp.directive
      Vue.mixinapp.mixin
      Vue.useapp.use
      Vue.prototypeapp.config.globalProperties

2.其他改变

  • data选项应始终被声明为一个函数。

  • 过度类名的更改:

    • Vue2.x写法

      .v-enter,
      .v-leave-to {
        opacity: 0;
      }
      .v-leave,
      .v-enter-to {
        opacity: 1;
      }
      
    • Vue3.x写法

      .v-enter-from,
      .v-leave-to {
        opacity: 0;
      }
      
      .v-leave-from,
      .v-enter-to {
        opacity: 1;
      }
      
  • 移除keyCode作为 v-on 的修饰符,同时也不再支持config.keyCodes

  • 移除v-on.native修饰符

    • 父组件中绑定事件

      <my-component
        v-on:close="handleComponentEvent"
        v-on:click="handleNativeClickEvent"
      />
      
    • 子组件中声明自定义事件

      <script>
        export default {
          emits: ['close']
        }
      </script>
      
  • 移除过滤器(filter)

    过滤器虽然这看起来很方便,但它需要一个自定义语法,打破大括号内表达式是 “只是 JavaScript” 的假设,这不仅有学习成本,而且有实现成本!建议用方法调用或计算属性去替换过滤器。

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

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

相关文章

web前端网页设计与制作:HTML+CSS旅游网页设计——桂林旅游(3页) web前端旅游风景网页设计与制作 div静态网页设计

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

Flink时间窗口语义

Flink时间窗口语义WarterMarker特点自定义水位线策略周期性水位线生成器&#xff08;Periodic Generator&#xff09;断点式水位线生成器&#xff08;Punctuared Generator&#xff09;在自定义数据源中发送水位线水位线的传递水位线总结窗口&#xff08;Window&#xff09;窗口…

spark-core-源码、Worker启动、sparksubmit提交、Driver启动

sparksubmit源码解析 在提交我们写好的jar包时候&#xff0c;用到submit命令&#xff0c;他的源码解析流程如上图 位于deploy里的SparkSubmit里面&#xff0c;根据main方法一点点run进去&#xff0c;分配我们传的参数&#xff0c;尤其是 val (childArgs, childClasspath, spa…

电脑屏幕亮度怎么调?四种自由调节亮度方式

现在的电脑是很方便的&#xff0c;可以说我们日常的生活中离不开电脑了。但是电脑屏幕亮度怎么调呢&#xff1f;这是一个问题&#xff0c;我们应该如何去调节&#xff1f;其实调节的方式有很多&#xff0c;我们根据自己的需求进行调节即可。接下来&#xff0c;为大家介绍四种电…

今日睡眠质量记录82分

昨天回去得比较晚了&#xff0c;不过睡眠质量还不错的&#xff0c;睡得比较沉&#xff0c;睡眠质量记录还不错的&#xff0c;大概有82分左右了。

计算机的发展史

文章目录计算机的发展史一&#xff0c;算盘二&#xff0c;纳皮尔骨筹三&#xff0c;帕斯卡林四&#xff0c;莱布尼茨步进计算器五&#xff0c;差分机六&#xff0c;分析机七&#xff0c;制表机八&#xff0c;微分分析机九&#xff0c;Mark I 计算机十&#xff0c;五代计算机计算…

如何使用CSS创建高级动画,这个函数必须掌握

微信搜索 【大迁世界】, 我会第一时间和你分享前端行业趋势&#xff0c;学习途径等等。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录&#xff0c;有一线大厂面试完整考点、资料以及我的系列文章。 我们每天都在网上摸鱼&#xff0c;作为前端开发人员&#xff0…

SD-WAN行业经常说CPE、uCPE、vCPE是什么意思,各自有什么区别和应用场景?

我们先来看下传统的硬件终端CPE到底是什么。 CPE&#xff08;CustomerPremisesEquipment&#xff0c;客户端设备&#xff09;是指位于用户端的网络终端设备&#xff0c;用于与运营商对接服务&#xff0c;是网络解决方案的重要组成部分&#xff0c;通常是路由器、防火墙或者路由…

Linux 性能分析命令详解

top 命令 top -1 按数字1可以看到 多个核&#xff0c;每个核的cpu的使用情况 监控工具\平台来收集cpu的使用率 是所有cpu数量的一个总体的使用率 top -E 按大写字母E可以看到不同单位的内存使用情况 KB MB GB TB mem&#xff1a; buffer cache swap buffer是磁盘虚拟出来…

99-104-Hadoop-MapReduce-排序:

99-Hadoop-MapReduce-排序&#xff1a; WritableComparable 排序 排序是MapReduce框架中最重要的操作之一。 MapTask和ReduceTask均会对数据按 照key进行排序。该操作属于 Hadoop的默认行为。任何应用程序中的数据均会被排序&#xff0c;而不管逻辑上是否需要。 默认排序是按…

PID控制原理基本介绍(图解)

PID控制原理基本介绍(图解) 这里先以一个阶跃响应做图解说明: 如下图所示,目标值设定为单位1,随着我们逐渐增大比例系数Kp,可以看到系统相应速度逐渐加快,但是始终存在稳态误差, 如下图所示,引入积分环节后,随着积分控制系数Ki逐渐加大,误差逐渐减小,并最终达…

SSM毕设项目 - 基于SSM的婚纱摄影网站(含源码+论文)

文章目录1 项目简介2 实现效果2.1 界面展示3 设计方案3.1 概述3.2 系统流程3.2.1 系统开发流程3.3 系统结构设计4 项目获取1 项目简介 Hi&#xff0c;各位同学好呀&#xff0c;这里是M学姐&#xff01; 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品&#xff0c;【…

OPNET Modeler 的安装及其相关配置

文章目录前言一、安装包下载1、OPNET Modeler 安装包下载2、Visual Studio 2010 安装包下载二、配置C/C环境变量三、OPNET Modeler 的安装1、安装 modeler_145A_PL1_7116_win2、安装 modeler_docs_28-Jan-2008_win3、安装 models_145A_PL1_27Feb08_win4、安装 OPNET.Modeler.14…

PLC中ST编程的基础知识

程序组织单元&#xff0c;简称POU&#xff1b;完整的PLC程序就是由无数个POU组成的&#xff1b; FB&#xff1a;功能块&#xff0c;也称函数块&#xff0c;执行时产生一个或多个值&#xff0c;一个功能块可以创建多个实例&#xff1b; VAR_IN&#xff1a;输入变量&#xff0c…

java绘制标注框,注册字体

文章目录场景思路步骤1.注册字体2.绘制标注框保存文本3.效果如下:场景 有个项目需要在java的后台将AI算法的标识框&#xff0c;置信度值&#xff0c;画到上传的报警图片上。以前都在算法部分画&#xff0c;但是效率有点低&#xff0c;所以传过来原始的图片&#xff08;也会用来…

第三章:JVM监控及诊断工具-GUI篇

JVM监控及诊断工具-GUI篇 使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息&#xff0c;但它们存在下列局限: 无法获取方法级别的分析数据&#xff0c;如方法间的调用关系、各方法的调用次数和调用时间等(这对定位应用性能瓶颈至关重要)。要求用户登录到…

手写一个react,看透react运行机制

适合人群 本文适合0.5~3年的react开发人员的进阶。 讲讲废话&#xff1a; react的源码&#xff0c;的确是比vue的难度要深一些&#xff0c;本文也是针对初中级&#xff0c;本意让博友们了解整个react的执行过程。 写源码之前的必备知识点 JSX 首先我们需要了解什么是JSX。…

Flutter高仿微信-第19篇-支付-我的零钱

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; /*** Author : wangning* Email : maoning20080809163.…

Unity DOTS学习 前置知识(一)

DOTS是什么 Data-Oriented Technology Stack(面向数据的技术栈) Unity 使用的5个核心包&#xff1a; The C# job system 提供快速安全的多线程操作The Burst compiler 优化C#代码的编译器&#xff0c;能够编译生成比mono或者L2CPP更快的代码。可以编译Unity中的任何代码Unit…

解决传统难题,WMS系统实现信息数据实时追踪

随着社会经济的发展&#xff0c;传统仓库的存储和做工难以适应当下市场经济的需求。仓库需要进行转型升级&#xff0c;从而适应当下的环境。在仓库的转型升级过程当中&#xff0c;WMS系统是不可或缺的一部分内容。 而WMS系统的应用会从多方面支持仓库的转型升级&#xff0c;其带…