Vue--》Vue3自定义组件以及新组件的使用讲解

news/2024/10/30 11:31:50/

目录

customRef

Vue3提供的新组件

Fragment

Teleport

Suspense

Vue3中全局API的改变


customRef

创建一个自定义的ref,并对其依赖项跟踪和更新触发进行显示控制。

<template><input type="text" v-model="keyword"><h3>{{keyword}}</h3>
</template>
<script>
import { customRef } from 'vue';
export default {setup(){// 创建自定义reffunction myref(value){let timerreturn customRef((track,trigger)=>{return {get(){console.log(`有人读取数据,我把数据${value}给他了`);track() // 通知Vue去追踪value的变化return value},set(newValue){console.log(`有人修改数据为:${newValue}`);clearTimeout(timer)timer = setTimeout(()=>{value = newValuetrigger() // 通知Vue重新去解析模板},500)}}})}let keyword = myref('hello')return {keyword}}
}
</script>

通过自定义ref,可以很方便的对其中的某些具体实现流程进行一定控制,实现一些特殊的效果。

还有一些组合式API就不再提及,需求者可自行去官网查看。

响应式数据的判断

isRef:检查一个值是否为一个 ref 对象

isReactive:检查一个对象是否是由 reactive 创建的响应式代理

isReadonly:检查一个对象是否是由 readonly 创建的只读代理

isProxy:检查一个对象是否是由 reactive 或者 readonly 方法方法创建的代理

组合式API的优势

传统的OptionsAPI,新增或修改一个需求,需要在data、methods、computed里去修改。

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

Vue3提供的新组件

在Vue3中不止语法进行了一定的修缮,而且出现了一些,Vue不存在的新的组件,举几个常年的组件进行讲解,如下:

Fragment

在Vue2中,组件必须有一个根组件,而在Vue3中组件可以没有根组件,内部会将多个标签包含在一个Fragment虚拟元素中。减少了标签层级,减少了内存使用。

Teleport

Teleport是一种能够将我们的组件html结构移动到指定位置的技术。比如一个嵌套很深的组件有个功能,需要进行CSS样式美化,如果嵌套太深,写css的层级太深不好操作,我们就可以借助这个组件将我们要修改的内容单独拎出来!

Suspense

等待异步组件时渲染一些额外的内容,让用户有更好的用户体验。其使用方式如下:

<template><div class="app"><h2>App根组件</h2><Suspense><template v-slot:default><levelTwoVue></levelTwoVue></template><template v-slot:fallback><h3>稍等,加载中....</h3></template></Suspense></div>
</template>
<script>
// import levelTwoVue from './components/test/levelTwo.vue'; // 静态引入
import { defineAsyncComponent, defineComponent } from 'vue';
const levelTwoVue = defineAsyncComponent(()=>import('./components/test/levelTwo.vue')) // 异步引入
export default {components:{levelTwoVue},}
</script>
<style lang="less" scoped>
.app{background-color: gray;padding: 20px;
}
</style>

子组件的样式也写上吧:

<template><div class="two"><h2>二级组件-子组件</h2></div>
</template><script>
export default {
}
</script>
<style lang="less" scoped>
.two{background-color: red;padding: 20px;
}
</style>

当然除了网速的限制让我们出现额外的渲染,也可以通过setup返回Promise对象实例,并对其加以定时器来实现延迟渲染页面的效果。如下:

<template><div class="two"><h2>二级组件-子组件</h2>{{num}}</div>
</template>
<script>
import { ref } from 'vue';
export default {setup(){let num = ref(0)return new Promise((resolve)=>{setTimeout(()=>{resolve({num})},1000)})}
}
</script>

Vue3中全局API的改变

Vue2.x有许多全局API和配置。例如注册全局组件和注册全局指令,在Vue3.0中对这些API做出了调整,是将全局的API,即:Vue.xxx 调整到应用实例 app 上。

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

http://www.ppmy.cn/news/10313.html

相关文章

网络安全等级保护定级指南 范围

声明 本文是学习github5.com 网站的报告而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 网络安全等级保护 为了配合《中华人民共和国网络安全法》的实施&#xff0c;适应云计算、移动互联、物联网、工业控制和大数据等新技术、新应用情况下网络安全等…

计算机组成原理_总线

计算机组成原理总目录总线概述 1. 总线介绍 我们知道计算机中有CPU、主存、辅存&#xff0c;以及打印机、键盘、鼠标等等的一些外设 那么各个设备之间肯定是要进行数据传输的&#xff0c;这就需要许多线路将它们连接起来 第一种方法&#xff1a;两两相联 外设数量越多&#xf…

Allegro174版本新功能介绍之去掉拷贝自动偏移功能

Allegro174版本新功能介绍之去掉拷贝自动偏移功能 Allegro升级到了174版本的时候,在用拷贝功能的时候,不管怎么拷贝都会出现偏差,即便是拷贝坐标的方式,如下图 那是因为174新增了一个自动粘贴的功能,按照下面的步骤可以去除自动粘贴的功能,具体操作如下 选择Setup选择Use…

RestTemplet+Ribbon实现负载均衡源码分析

为什么加上LoadBalanced&#xff0c;RestTemplate就有负载均衡的能力呢&#xff1f;源码分析&#xff1a; RestTemplate拦截器 首先看RestTemplate类&#xff0c;继承了InterceptingHttpAccessor&#xff0c;代码中有个类型为ClientHttpRequestInterceptor拦截器集合&#xf…

4645. 选数异或

给定一个长度为 n 的数列 A1,A2,,An 和一个非负整数 x&#xff0c;给定 m 次查询&#xff0c;每次询问能否从某个区间 [l,r] 中选择两个下标不同的数使得他们的异或等于 x。 输入格式 输入的第一行包含三个整数 n,m,x。 第二行包含 n 个整数 A1,A2,,An。 接下来 m 行&#x…

学习css3,使用代码实现一根心爱的二踢脚

2023春节快到了&#xff0c;虽然还在上班&#xff0c;但心情早已开始激动&#xff0c;感叹2022终将过去&#xff0c;喜迎2023兔年吧。让我以激动的心情&#xff0c;利用所学css3代码知识&#xff0c;实现一根心爱的二踢脚吧。 目录 1、实现思路 2、实现二踢脚的主体圆柱部分…

2、Javaweb_HTML:表单CSS:页面美化和布局控制

HTML标签&#xff1a;表单标签 * 表单&#xff1a; * 概念&#xff1a;用于采集用户输入的数据的。用于和服务器进行交互。 * form&#xff1a;用于定义表单的。可以定义一个范围&#xff0c;范围代表采集用户数据的范围 * 属性&#xff1a; * ac…

梦想cms1.4代码审计

目录 一、环境配置 二、代码审计 1、后台漏洞 &#xff08;1&#xff09;BookAction.class.php &#xff08;2&#xff09;BackdbAction.class.php任意文件删除 2、前台漏洞 &#xff08;1&#xff09;TagsAction.class.php &#xff08;2&#xff09;BookAction.cla…