Vue3(六):Vue3其他API、Vue3新组件Teleport、Vue2和3区别

一、其他API

1.shallowRef 与 shallowReactive

(1)shallowRef

 1. 作用:创建一个响应式数据,但只对顶层属性进行响应式处理

2.用法:

let myVar = shallowRef(initialValue);

3. 特点:只跟踪引用值的变化,不关心值内部的属性变化。

比如:当访问person.value时可以,但是访问person内部的属性person.value.name就不行。

(2)shallowReactive

 1. 作用:创建一个浅层响应式对象,只会使对象的最顶层属性变成响应式的,对象内部的嵌套属性则不会变成响应式的

2. 用法:

 const myObj = shallowReactive({ ... });

3. 特点:对象的顶层属性是响应式的,但嵌套对象的属性不是。

(3)总结

通过使用 [shallowRef()]和[shallowReactive()来绕开深度响应。浅层式 `API` 创建的状态只在其顶层是响应式的,对所有深层的对象不会做任何处理,避免了对每一个内部属性做响应式所带来的性能成本,这使得属性的访问变得更快,可提升性能。就是当你只关心修改整体的时候就可以用这两个属性。

2.readonly 与 shallowReadonly

(1)readonly

1. 作用:用于创建一个对象的深只读副本。

2. 用法:

const original = reactive({ ... });const readOnlyCopy = readonly(original);

3. 特点:

   * 对象的所有嵌套属性都将变为只读

   * 任何尝试修改这个对象的操作都会被阻止(在开发模式下,还会在控制台中发出警告)。不可修改。

4. 应用场景:

   * 创建不可变的状态快照。

   * 保护全局状态或配置不被修改。

(2)shallowReadonly

1. 作用:与 `readonly` 类似,但只作用于对象的顶层属性

2. 用法:

const original = reactive({ ... });const shallowReadOnlyCopy = shallowReadonly(original);

3. 特点:

   * 只将对象的顶层属性设置为只读对象内部的嵌套属性仍然是可变的。

   * 适用于只需保护对象顶层属性的场景。

3.toRaw 与 markRaw

(1)toRaw

1. 作用

用于获取一个响应式对象的原始对象, `toRaw` 返回的对象不再是响应式的,不会触发视图更新。

   > 官网描述:这是一个可以用于临时读取而不引起代理访问/跟踪开销,或是写入而不触发更改的特殊方法。不建议保存对原始对象的持久引用,请谨慎使用。

   > 何时使用? —— 在需要将响应式对象传递给非 `Vue` 的库或外部系统时,使用 `toRaw` 可以确保它们收到的是普通对象

2.用法

import { reactive,toRaw,markRaw,isReactive } from "vue";/* toRaw */// 响应式对象let person = reactive({name:'tony',age:18})// 原始对象let rawPerson = toRaw(person)

比如获取person2之后,再点击修改person2的数据,就不奏效。

(2)markRaw

1. 作用

标记一个对象,使其**永远不会**变成响应式的。

例如使用`mockjs`时,为了防止误把`mockjs`变为响应式对象,可以使用 `markRaw` 去标记`mockjs`。(mockjs是一个模仿后端接口的库,只要npm i mockjs,然后import mockjs from 'mockjs'就可以使用了。)

2.使用

/* markRaw */let citys = markRaw([{id:'asdda01',name:'北京'},{id:'asdda02',name:'上海'},{id:'asdda03',name:'天津'},{id:'asdda04',name:'重庆'}])// 根据原始对象citys去创建响应式对象citys2 —— 创建失败,因为citys被markRaw标记了let citys2 = reactive(citys)

4.customRef 

作用:创建一个自定义的`ref`,并对其依赖项跟踪和更新触发进行逻辑控制。

           实现防抖效果

这里有一个例子,比如我要实现这样一个功能,输入一个数据,不让他立即变化,而是过了一秒钟之后再变。那么利用ref是不行的,因为他是即时的响应只要一输入就立马变化。所以我们用到了customRef.

如下图所示:

这里面要重点理解track,和trigger.

但是实际开发中,我们不这样,而是用到了hooks,可以自己写一个useMsgRef.ts

useMsgRef.vue

import { customRef } from 'vue';export default function (initValue: string, delay: number) {// 使用Vue提供的customRef定义响应式数据let timer: number;// track(跟踪)、trigger(触发)let msg = customRef((track, trigger) => {return {// get何时调用?—— msg被读取时get() {track(); //告诉Vue数据msg很重要,你要对msg进行持续关注,一旦msg变化就去更新return initValue;},// set何时调用?—— msg被修改时set(value) {clearTimeout(timer);timer = setTimeout(() => {initValue = value;trigger(); //通知Vue一下数据msg变化了}, delay);},};});return { msg };
}

 App.vue

<template><div class="app"><h2>{{ msg }}</h2><input type="text" v-model="msg"></div>
</template><script setup lang="ts" name="App">
import { ref } from 'vue'
import useMsgRef from './useMsgRef'// 使用Vue提供的默认ref定义响应式数据,数据一变,页面就更新
// let msg = ref('你好')// 使用useMsgRef来定义一个响应式数据且有延迟效果
let { msg } = useMsgRef('你好', 2000)</script><style scoped>
.app {background-color: #ddd;border-radius: 10px;box-shadow: 0 0 10px;padding: 10px;
}button {margin: 0 5px;
}
</style>

二、Vue3新组件

1.Teleport

(1)解释

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

(2)使用

<teleport to='body' ><div class="modal" v-show="isShow"><h2>我是一个弹窗</h2><p>我是弹窗中的一些内容</p><button @click="isShow = false">关闭弹窗</button></div>
</teleport>

比如我们实现一个这样的效果,点击弹窗,窗口显示在整个页面的中间。filter是实现滤镜效果。右边是实现居中效果。我们发现一旦加了filter,右边居中显示效果不奏效了,不显示在整个页面中间,而是显示在父容器中间。那么这时候就用到了teleport.

 如下是使用teleport

2.Suspense

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

(2)使用步骤

   -  异步引入组件

   -  使用`Suspense`包裹组件,并配置好`default` 与 `fallback`

(3)使用场景

在子组件setup中使用axios请求一些东西,又显请求返回结果慢,想让空白的页面显示一些东西就可以用suspense.

import { defineAsyncComponent,Suspense } from "vue";
const Child = defineAsyncComponent(()=>import('./Child.vue'))
``````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>

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

 也就是之前的全局APIApp.xxx全部变成了app.xxx

app.component

app.config

app.directive

app.mount

app.unmount

app.use

4.非兼容性改变(Vue23区别)

 

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

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

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

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

- 移除了`$on`、`$off` 和 `$once` 实例方法。

- 移除了过滤器 `filter`。

- 移除了`$children` 实例 `propert`。

  ......

完结!!!接下来会做关于Vue3的 项目,有需要的可以关注!

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

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

相关文章

IntelliJ IDEA配置类注释模板和方法注释模板

配置类注释模板和方法注释模板 IDEA模板预定义变量类注释模方法注释模板方法参数优化 IDEA模板 在IDEA中&#xff0c;自带的注释模板可能不满足自身需求或者不满意&#xff0c;此时可以通过配置IDEA模板来解决。 预定义变量 内置模板是可编辑的&#xff0c;除了静态文本、代码和…

react中关于类式组件和函数组件对props、state、ref的使用

文章中有很多蓝色字体为扩展链接&#xff0c;可以补充查看。 常用命令使用规则 组件编写方式: 1.函数式 function MyButton() { //直接return 标签体return (<>……</>); }2.类 class MyButton extends React.Component { //在render方法中&#xff0c;return…

GPT-3.5和GPT-Plus的区别

GPT-3.5和GPT-Plus都是OpenAI开发的大型语言模型,但它们之间有一些区别: GPT-3.5就是大家熟知的ChatGPT GPT-Plus 是Open AI 的更强的AI模型GPT-4版本。两者区别是&#xff1a; 模型规模:GPT-Plus是GPT-3的一个更大版本,参数量更多。而GPT-3.5是GPT-3的一个优化版本,在参数量…

基于Copula函数的风光功率联合场景生成_任意修改生成的场景数目(附带Matlab代码)

基于Copula函数的风光功率联合场景生成 削减为6个场景 部分展示削减为5个场景 部分展示 风光等可再生能源出力的不确定性和相关性给系统的设计带来了极大的复杂性&#xff0c;若忽略这些因素&#xff0c;势必会在系统规划阶段引入次优决策风险。因此&#xff0c;在确定系统最佳…

TR-DPO:革新大模型对齐技术

这篇论文中提出的TR-DPO&#xff08;Trust Region Direct Preference Optimization&#xff09;方法的架构或流程设计主要侧重于改进语言模型对齐过程中的稳定性和有效性。 在传统的对齐方法中&#xff0c;模型在学习的时候需要尽可能地靠近一个预先设定的参考模型。这就像是给…

c语言,单链表的实现----------有全代码!!!!

1.单链表的定义和结构 单链表是一种链式的数据结构&#xff0c;它用一组不连续的储存单元存反线性表中的数据元素。链表中的数据是以节点的形式来表示的&#xff0c;节点和节点之间相互连接 一般来说节点有两部分组成 1.数据域 &#xff1a;数据域用来存储各种类型的数据&…

Windows系统下查看C语言文件反汇编

一、配置编译器环境变量 1.下载mingw64 MinGW 的全称是&#xff1a;Minimalist GNU on Windows &#xff0c;MinGW 就是 GCC 的 Windows 版本 。 MinGW-w64 与 MinGW 的区别在于 MinGW 只能编译生成32位可执行程序&#xff0c;而 MinGW-w64 则可以编译生成 64位 或 32位 可执行…

day11 | 栈与队列 part-3 (Go) | 239 滑动窗口最大值、347 前 K 个高频元素 (好难)

今日任务 239 滑动窗口最大值 (题目:. - 力扣&#xff08;LeetCode&#xff09; )347 前 K 个高频元素 (题目: . - 力扣&#xff08;LeetCode&#xff09; )栈与队列总结 239 滑动窗口最大值 题目:. - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums&#xf…

处理json文件,并将数据汇总至Excel表格

从scores.jason文件中读取学生信息,输出学生的学号&#xff0c;姓名&#xff0c;各科成绩&#xff0c;平均分, 各科标准差 scores.jason {"学院": "计算机学院","班级": "2022级1班","成绩": [{"学号": 1001,&q…

使用avx2 指令集加速向量算法运算

使用cpu-z 查看cpu指令集 2 向量加&#xff0c;乘法&#xff0c;除法 我们使用向量加&#xff0c;为什么函数是0 到 8 的计算&#xff0c;因为avx2 寄存器为256位&#xff0c;同时设置启动增强指令集 #include <immintrin.h> // 引入包含AVX2指令集的头文件void vecto…

C++类和对象:赋值重载,const成员

文章目录 1.赋值运算符重载1.1运算符重载1.2 赋值运算符重载1.3 前置和后置重载 2.日期类的实现3. const成员函数4 取地址及const取地址操作符重载 上文介绍了前三个默认成员函数&#xff0c;本文会介绍剩下三个&#xff0c; 赋值重载会重点展开。 1.赋值运算符重载 1.1运算符…

代码随想录 Day17 字符串 | LC344 反转字符串 LC541 反转字符串II 卡码网54替换数字

一、反转字符串 题目&#xff1a; 力扣344&#xff1a;反转字符串 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题…

微服务相关

1. 微服务主要七个模块 中央管理平台&#xff1a;生产者、消费者注册&#xff0c;服务发现&#xff0c;服务治理&#xff0c;调用关系生产者消费者权限管理流量管理自定义传输协议序列化反序列化 2. 中央管理平台 生产者A在中央管理平台注册后&#xff0c;中央管理平台会给他…

不说成为Linux高级工程师,但成为合格的软件开发人员还是够了,一文深入浅出的精炼总结Linux核心知识点,掌握Linux的使用与高阶技巧

不说成为Linux高级工程师&#xff0c;但成为合格的软件开发人员还是够了&#xff0c;一文深入浅出的精炼总结Linux核心知识点&#xff0c;掌握Linux的使用与高阶技巧。 Linux 的学习对于一个程序员的重要性是不言而喻的。前端开发相比后端开发&#xff0c;接触 Linux 机会相对…

图像基础—图像分类

图像通常分为二值图像、灰度图像和彩色图像 图 1-3 二值图像、灰度图像和彩色图像 &#xff08;1&#xff09;二值图像 二值图像又称为黑白图像&#xff0c;图像中任何一个点非黑即白&#xff0c;要么为白色&#xff08;像素 为 255&#xff09;&#xff0c;要么为黑色&#x…

20240417,友元 FRIEND

本来要学习的吃瓜吃了一下午 目录 3.1 全局函数做友元 3.2 友元类 3.3 成员函数做友元 三&#xff0c;友元 3.1 全局函数做友元 #include<iostream> using namespace std; class Building {friend void goodGay(Building* building);//好朋友&#xff0c;可以访问…

YooAsset快速入门

文章目录 YooAsset快速入门指南&#xff1a;YooAsset学习核心要掌握的要点主要包括以下几个方面&#xff1a;基于YooAsset进行游戏资源管理的应用实例 YooAsset快速入门指南&#xff1a; YooAsset是一款专为游戏开发设计的资产管理和分发系统&#xff0c;它能够帮助开发者高效…

2024阿里云4核8G服务器租用优惠价格700元一年

阿里云4核8G服务器租用优惠价格700元1年&#xff0c;配置为ECS通用算力型u1实例&#xff08;ecs.u1-c1m2.xlarge&#xff09;4核8G配置、1M到3M带宽可选、ESSD Entry系统盘20G到40G可选&#xff0c;CPU采用Intel(R) Xeon(R) Platinum处理器&#xff0c;阿里云优惠 aliyunfuwuqi…

怎样将excel的科学计数法设置为指数形式?

对了&#xff0c;这个问题中所谓的“指数形式”是指数学上书写的右上标的指数格式&#xff0c;能不能通过单元格设置来做这个格式的转换呢&#xff1f; 一、几个尝试 以下&#xff0c;以数字123000为例来说明。 情况1.转换成数学上的书写方式&#xff0c;如下图的样子&#x…

Easy GIS .NET GMap.Net

Easy GIS .NET & GMap.Net .NET 环境下非常简单的GIS地图开发库。 Easy GIS .NET 一个简单的GIS 桌面应用程序&#xff0c;实现了地图瓦片加载、shapefile文件和csv文件加载渲染、地图坐标系统设置及转换等等基本功能&#xff0c;非常简单易用。 Easy GIS .NET is an o…