当前位置: 首页 > news >正文

vue3.5新特性整理

本文章介绍vue3.5更新的几个新特性

1.vue中watch中深度监听更新的层级

在之前deep 属性是一个boolean值 我们要监听对象的变化需要使用deep: true 在vue3.5之后 deep 也可以是一个number 表示对象要监听的层级数量 这个功能还是比较实用的 因为层级过深的时候我们可能需要监听数据所在层级没有那么什么就不需要全部监听 可以优化性能

<template><div><button @click="change">change</button></div>
</template>
<script setup lang="ts">
import { ref, watch } from 'vue'
let obj = ref({a: {n1: 0,b: {n2: 0,c: {n3: 0,d: {n4: 0,e: {n5: 0}}}}}
})
watch(obj, (val)=> {console.log(val)
}, {deep: 2
})const change = () => {obj.value.a = {q: 0}
}
</script>

在 vue3.4 中watch 配置中还新增一个once 属性 只监听一次数据变化

watch(obj, (val)=> {console.log(val)
}, {deep: 2,once: true
})

2.vue中之前响应式数据的定义和获取组件的示例都是用 ref 这个函数定义 vue3.5之后引入新的定义获取ref的函数 useTemplateRef

基本使用

    之前的使用方式const inputDom = ref(null)<input value="" ref="inputDom" />获取dominputDom.value.focus()3.5新增<template><div><input value="" ref="testRef" /><button @click="onHandler">获取焦点</button></div></template><script setup lang="ts">import { useTemplateRef } from 'vue'const inputRef = useTemplateRef('testRef')const onHandler = () => {inputRef.value.focus()}</script>

3.Teleport 传送组件

Teleport 组件新增一个 defer 之前传送组件只能传送到 定义传送组件之前已经存在dom里面 现在新增这个defer属性 可以传送到 定义在传送组件后面的dom中

TestTeleport.vaue
<template><div ><Teleport defer  to="#demo_1" ><div >teleport test </div></Teleport><!-- 加上defer 属性可以将Teleport 组件放到demo_1 结构下面 --><div id="demo_1"></div></div>
</template>Home.vue
<template><main><!-- 组件渲染之前已经存在dom结构 --><div id='test'></div><TeleportDemo /></main>
</template>

4.props 3.5之后新增一个比较好用的功能 对props解构

之前对 props 进行结构不能实现vue的响应式更新
并且对props 赋默认值需要使用 withDefaults 包裹有一点点麻烦 如果要想实现对props 结构需要使用 toRef/ toRefs

TestProps.vue
<template><div>test props<p>msg: {{ msg }}</p><p>count: {{ count }}</p></div>
</template>
<script setup lang="ts" >
import { watch } from "vue"const { msg, count } = defineProps<{msg: string,count: number
}>()watch(()=> count, (val)=> {console.log(val)
})</script>Home.vue<template><main><TestProps  :msg="msg" :count="count" /><button @click="onTest">test</button></main>
</template>
<script setup lang="ts">
import TestProps from '../components/TestProps.vue'
import { ref } from 'vue'
let msg = ref<string>('21323123')
let count = ref<number>(1)
function onTest() {count.value ++
}
</script>

5. onWatcherCleanup 新增api

这个api 也是优化watch 监听
如果要监听的属性变化很快而且我们在处理变化的之后的逻辑比较复杂 会很影响性能 之前处理这种操作可以使用防抖函数 现在vue 给我们提供了一种解决方法

    <template><div>{{ num }}<button @click="onTest">+1</button></div></template><script setup lang='ts'>import {ref, watch, onWatcherCleanup } from 'vue'let num = ref<number>(0)watch(num, (val) => {let timer = setTimeout(()=> {console.log(val)}, 1000) onWatcherCleanup(()=> {clearTimeout(timer)})})const onTest = () => {num.value ++}</script> 

注意 如果使用setTimeout测试间隔时间不能小于200ms 如果小于200毫秒 setTimeout 中的打印语句还是会执行的

以上就是我对vue3.5 更新的新特性的整理 如有错误欢迎指出

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • pytest实战演练
  • 集成电路学习:什么是RTC实时时钟
  • 利用AI大语言模型和Langchain开发智能车算法训练知识库(上篇)
  • UE引擎工具链
  • SealSuite 一站式 IT 管理与办公安全解决方案,助力出海企业夯实数字化底座
  • 【生日视频制作】海上绿色摩托艇汽车艇车身AE模板修改文字软件生成器教程特效素材【AE模板】
  • OpenCV颜色空间转换(1)颜色空间转换函数cvtColor()的使用
  • 单元测试 Mock不Mock?
  • P7072 [CSP-J2020] 直播获奖
  • 解决Metasploit调用Nessus报错问题
  • Kafka【十三】消费者消费消息的偏移量
  • 使用LLaMA-Factory快速训练自己的专用大模型
  • 在 Windows 环境下实现免密登录 Linux 服务器
  • Spring之Bean的生命周期 2024-9-6 19:47
  • 水晶连连看 - 无限版软件操作说明书
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【mysql】环境安装、服务启动、密码设置
  • 07.Android之多媒体问题
  • 77. Combinations
  • C语言笔记(第一章:C语言编程)
  • ESLint简单操作
  • HTTP中GET与POST的区别 99%的错误认识
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • react-native 安卓真机环境搭建
  • Redux 中间件分析
  • 回顾 Swift 多平台移植进度 #2
  • 译有关态射的一切
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 正则表达式-基础知识Review
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (接口封装)
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)SvelteKit教程:hello world
  • (原創) 物件導向與老子思想 (OO)
  • (转)【Hibernate总结系列】使用举例
  • (转)Linux整合apache和tomcat构建Web服务器
  • ***利用Ms05002溢出找“肉鸡
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET Core中如何集成RabbitMQ
  • .net项目IIS、VS 附加进程调试
  • @基于大模型的旅游路线推荐方案
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [8481302]博弈论 斯坦福game theory stanford week 1