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

news2024/11/30 6:48:40

一、其他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.coloradmin.cn/o/1602942.html

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

相关文章

C语言学习/复习22----阶段测评编程题

一、阶段测评练习 题1&#xff1a; 题2&#xff1a;

【生成式 AI 精英速成计划】了解如何使用大模型平台、训练与部署以及如何打造生成式AI应用

目录 一、生成式 AI 带来的新挑战二、生成式 AI 精英速成计划三、技术开发技能课程体验最后 一、生成式 AI 带来的新挑战 随着计算能力的飞速提升和大数据技术的广泛应用&#xff0c;生成式AI得以取得显著进展&#xff0c;特别是在深度学习的推动下&#xff0c;机器能够生成前…

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

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

MFC下CPictureCtrl控件基于鼠标左键坐标的直线绘图

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 目录 1.创建自定义类CMyPictureCtrl 2.布局Dlg 3.实验代码 4.运行结果 在基于对话框的MFC应用程序中&#xff0c;通过鼠标操作获取坐标并在CPictureCtrl控件中使用Lin…

电商技术揭秘系列文章合集(上)

电商技术揭秘系列文章&#xff08;上&#xff09; 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 …

越来越多服务区安装智慧公厕是什么原因

随着社会的不断发展&#xff0c;人们对生活质量的要求也越来越高。在这种背景下&#xff0c;越来越多的服务区开始安装智慧公厕&#xff0c;以满足人们在出行过程中的生活需求。那么&#xff0c;为什么越来越多的服务区选择安装智慧公厕呢&#xff1f;这其中究竟有哪些原因呢&a…

手机副业赚钱秘籍:让你的手机变成赚钱利器

当今社会&#xff0c;智能手机已然成为我们生活不可或缺的一部分。随着技术的飞速进步&#xff0c;手机不再仅仅是通讯工具&#xff0c;而是化身为生活伴侣与工作助手。在这个信息爆炸的时代&#xff0c;我们时常会被一种焦虑感所困扰&#xff1a;如何能让手机超越消磨时光的定…

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

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

JVM之方法区的详细解析

方法区 方法区&#xff1a;是各个线程共享的内存区域&#xff0c;用于存储已被虚拟机加载的类信息、常量、即时编译器编译后的代码等数据&#xff0c;虽然 Java 虚拟机规范把方法区描述为堆的一个逻辑部分&#xff0c;但是也叫 Non-Heap&#xff08;非堆&#xff09; 设置方法…

STC89C52学习笔记(九)

STC89C52学习笔记&#xff08;九&#xff09; 综述&#xff1a;本文主要介绍了蜂鸣器、蜂鸣器如何使用以及如何利用蜂鸣器播放不同频率声音。 一、蜂鸣器 1.定义和作用 电信号→声音信号&#xff0c;常用来产生按键音和报警音。 2.分类 有源&#xff1a;自带振荡器&#…

基于Python的机器学习的文本分类系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

单独使用YOLOV9的backbone网络

前言 YOLO系列的网络结构都是通过.yaml来进行配置的,当要单独想使用其中的backbone网络时,可以通过yaml配置文件来进行网络搭建。 backbone的yaml配置文件与网络结构 backbone:[[-1, 1, Silence, []], # conv<

linux中级课程:延迟任务的设置(at 命令)

1.首先在系统中建立easylee账户&#xff0c;并且设置密码为easylee 2.延迟任务由root账户设置&#xff0c;要求在5小时后备份系统中的用户信息文件到/backup中&#xff0c;确保延迟任务是使用非交互模式建立 此时创建了一个test.sh脚本&#xff0c;并且使用非交互的形式进行编辑…

实在智能携AI Agent智能体亮相2024年度QCon全球软件开发大会

4月11日-13日&#xff0c;以“全面进化”作为2024年度主题的「QCon全球软件开发大会暨智能软件开发生态展」在北京隆重举行。作为AI准独角兽和超自动化头部企业&#xff0c;实在智能应邀出席发表《面向办公自动化领域的AI Agent建设思考与分享》演讲及圆桌交流&#xff0c;展示…

HDLbits 刷题 -- Mux9to1v

Create a 16-bit wide, 9-to-1 multiplexer. sel0 chooses a, sel1 chooses b, etc. For the unused cases (sel9 to 15), set all output bits to 1. Expected solution length: Around 15 lines. 译&#xff1a; 创建一个16位宽的9对1多路复用器。Sel 0选择a, Sel 1选择b&a…

硬刚Suno?StabilityAI推出Stable Audio 2.0,可生成三分钟44.1kHz立体声的高质量完整曲目

StabilityAI公司最新推出音频生成模型Stable Audio 2.0&#xff0c;该模型可通过单一自然语言提示以44.1kHz立体声播放具有连贯音乐结构的高质量、完整曲目&#xff0c;长达三分钟。 新模型超越了文本到音频的范围&#xff0c;还包括音频到音频的功能。用户现在可以上传音频样…

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第四套

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第四套 (共9套&#xff0c;有答案和解析&#xff0c;答案非官方&#xff0c;仅供参考&#xff09;&#xff08;共九套&#xff0c;每套四十个选择题&#xff09; 部分题目分享&#xff0c;完整版获取&#xff08;WX:didadida…

20240417,友元 FRIEND

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

香港科技大学广州|数据科学与分析学域硕博招生宣讲会—华东师范大学专场

时间&#xff1a;2024年4月25日&#xff08;星期四&#xff09;13:30 地点&#xff1a;华东师范大学普陀校区文附楼507 报名链接&#xff1a;https://www.wjx.top/vm/Q0cKTUI.aspx# 跨学科研究领域 *数据驱动的人工智能和机器学习 *统计学习和建模 工业和商业分析 *特定行业…

【R语言】动画图:散点图

绘制成如下的散点图&#xff1a; 如果数据量大&#xff0c;有多个年份&#xff0c;就会生成多张图&#xff0c;例如&#xff1a; 具体代码如下&#xff1a; library(gapminder)#加载 gapminder 包&#xff0c;其中包含了从 1952 年至 2007 年各个国家的 GDP、预期寿命和人口数据…