首页 > 其他分享 >Vue3.5新版本特性一览-数组操作10倍性能提升+响应式属性解构+自定义组件优化+ssr水合改善+teleport支持defer!

Vue3.5新版本特性一览-数组操作10倍性能提升+响应式属性解构+自定义组件优化+ssr水合改善+teleport支持defer!

时间:2024-12-03 12:28:53浏览次数:7  
标签:PR 10 vue const 自定义 解构 3.5 import

Vue 团队欣喜地宣布,Vue 3.5(代号 Tengen Toppa Gurren Lagann)于9月初发布!本次小版本更新并未引入任何破坏性更改,带来了诸多内部优化以及新功能。在这篇文章中,我们将重点介绍一些新特性和改进。如需了解全部更新内容,请参阅 GitHub 上的完整更新日志

最近 突然想整理一些前端框架版本更新的历史,想到就开始吧
这是9月后开启的版本,其实vue的更新都比较保守,实际上很多内容都是大版本更新的

我比较印象深刻的改动:

  • 数组优化
  • teleport defer支持 (这个是真的很好,之前出现过很多次,需要手动setTimeout,因为要挂载到别的组件的某个元素,但那个组件的渲染是慢一丢丢的就会出问题)

1. 响应式系统优化

Vue 3.5 对响应式系统进行了重大重构,性能提升显著,同时内存使用减少了 56%,且行为保持不变。这次重构还解决了 SSR 环境中挂起计算属性导致的内存问题,以及过时的计算值。

此外,对于大型深层响应式数组的追踪操作,性能提升达 10 倍

详细信息PR#10397, PR#9511


2. Reactive Props Destructure(响应式属性解构)

响应式属性解构在 3.5 中正式稳定,默认启用。通过 <script setup> 中的 defineProps,解构的变量现在具有响应式特性。这一功能还支持使用 JavaScript 原生的默认值语法,简化了具有默认值的 prop 声明。

示例:

之前:

const props = withDefaults(
  defineProps<{
    count?: number
    msg?: string
  }>(),
  {
    count: 0,
    msg: 'hello'
  }
)

现在:

const { count = 0, msg = 'hello' } = defineProps<{
  count?: number
  msg?: string
}>()

解构后的变量(如 count)会被编译器自动追踪,因此无需显式绑定到 props。

详细信息RFC#502


3. SSR 改进

Lazy Hydration(延迟激活)

通过 defineAsyncComponenthydrate 选项,异步组件现在可以指定激活策略。例如,仅在组件可见时激活:

import { defineAsyncComponent, hydrateOnVisible } from 'vue'

const AsyncComp = defineAsyncComponent({
  loader: () => import('./Comp.vue'),
  hydrate: hydrateOnVisible()
})

详细信息PR#11458


useId()

新 API useId() 用于生成唯一且跨服务端和客户端稳定的 ID,非常适用于表单元素或无障碍属性:

<script setup>
import { useId } from 'vue'

const id = useId()
</script>

<template>
  <form>
    <label :for="id">Name:</label>
    <input :id="id" type="text" />
  </form>
</template>

详细信息PR#11404


data-allow-mismatch

在客户端值与服务端值不可避免会有差异的情况下(如日期),可通过 data-allow-mismatch 属性抑制警告:

<span data-allow-mismatch>{{ data.toLocaleString() }}</span>

4. 自定义元素的增强

Vue 3.5 修复了 defineCustomElement() 的众多历史问题,同时新增以下能力:

  • 通过 configureApp 为自定义元素配置应用。
  • 新增 useHost()useShadowRoot()this.$host API,支持访问宿主元素和 Shadow DOM。
  • 支持通过 shadowRoot: false 禁用 Shadow DOM。
  • 支持 nonce 选项,为自定义元素注入的 <style> 标签提供安全设置。

示例:

import MyElement from './MyElement.ce.vue'

defineCustomElements(MyElement, {
  shadowRoot: false,
  nonce: 'xxx',
  configureApp(app) {
    app.config.errorHandler = ...
  }
})

5. 其他值得关注的新特性

useTemplateRef()

通过 useTemplateRef() 动态获取模板引用:

<script setup>
import { useTemplateRef } from 'vue'

const inputRef = useTemplateRef('input')
</script>

<template>
  <input ref="input">
</template>

这提升了动态引用的灵活性,并增强了开发体验。


Deferred Teleport(延迟传送)

<Teleport> 组件新增 defer 属性,可延迟目标元素的创建。例如:

<Teleport defer target="#container">...</Teleport>
<div id="container"></div>

详细信息PR#11387


onWatcherCleanup()

新增 onWatcherCleanup() API,用于在 watch 中注册清理回调:

import { watch, onWatcherCleanup } from 'vue'

watch(id, (newId) => {
  const controller = new AbortController()

  fetch(`/api/${newId}`, { signal: controller.signal }).then(() => {
    // 回调逻辑
  })

  onWatcherCleanup(() => {
    // 终止过期请求
    controller.abort()
  })
})

然后今年vue大概更新了3.4 以及3.5两个版本,后面会做个总结,对比下vue和react的年度状况 - 整体来看,vue3进入了稳定器

标签:PR,10,vue,const,自定义,解构,3.5,import
From: https://blog.csdn.net/m0_38015699/article/details/144185189

相关文章

  • [1079] QGIS tools to python code
    Steps:OpentheProcessingToolboxinQGIS.Searchforthedesiredtool,suchastheRasterCalculator.Settheparametersfortheselectedtoolaccordingtoyourrequirments.ClickonAdvanced,andconvertthetooltoPythoncode.Examples:RasterCal......
  • java-自定义日志注解
    ......
  • Python 自动化办公的 10 大脚本
    1.批量重命名文件如果你需要对一堆文件进行重命名,比如给文件添加前缀或后缀,可以使用以下脚本:importos defbatch_rename_files(directory,prefix):  """批量重命名指定目录下的所有文件,添加前缀"""  forfilenameinos.listdir(directory):    new......
  • 【Thinkphp6】使用框架内置中间件AllowCrossDomain允许跨域请求,当请求header中携带自
    【问题描述】使用框架内置中间件AllowCrossDomain允许跨域请求,当请求header中携带自定义参数时,跨域请求报错,不携带自定义参数时,可正常访问【解决方案】方案一:修改框架内置中间件修改框架内置中间件 AllowCrossDomain,将$header属性的 Access-Control-Allow-Headers ......
  • 10C++选择结构(4)
    一、switch语句问题:风之巅小学规定,若测试成绩大于或等于90分为“A”,大于或等于70分小于90分为“B”,大于或等于60分小于70分为“C”,60分以下为“D”。试编一程序,输入一个成绩,输出它的等级。流程图如下:#include<typeinfo>//变量类型头文件,还是有问题;无法判断int#include<......
  • hhdb数据库介绍(10-28)
    管理管理菜单主要囊括对业务数据进行管理的功能,例如对数据的备份恢复或执行业务表的DDL语句等操作。数据对象数据对象功能可以帮助用户通过列表实时查看当前已存在的数据对象,了解业务数据的整体情况。提供了对数据对象的筛选、统计、关联、详情等信息。基础数据对象的统计分......
  • hhdb数据库介绍(10-29)
    管理数据备份从存储节点或灾备机房数据备份选择灾备机房类型、从库(双主备库)存储节点类型进行备份,页面根据选择类型,对应给出提示信息。发起备份时,检测从存储节点状态是否符合备份条件。主从数据一致性检测如果机房类型选择灾备机房或者存储节点类型选择从库(双主备库),发起备份......
  • hhdb数据库介绍(10-30)
    管理数据恢复当业务数据遭受损坏或丢失时,可使用数据恢复功能将已备份的数据重新还原到损坏或丢失的逻辑库中。数据恢复时序图:发起恢复发起说明点击“管理->数据恢复->【发起恢复】”即可跳转到数据恢复页面恢复发起前,出于数据安全性考虑,若超过3小时没有数据备份,则......
  • hhdb数据库介绍(10-31)
    管理数据恢复执行数据恢复说明恢复页面输入正确的恢复信息,提交恢复任务后跳转到恢复页面,任务状态显示“恢复中且有进度更新显示”,此时若触发删除操作,则提示“恢复执行中不能删除”恢复期间计算节点会暂停服务,待恢复完成后会自动重启服务。(若中途恢复失败则需手动启动计......
  • hhdb数据库介绍(10-21)
    监控监控面板集群资源监控服务器性能在“配置->服务器”页面配置了服务器SSH信息且开启监控的情况下,在此监控面板中可监控到服务器的资源详细信息;当“服务器”页面停止”或者“移除”SSH配置后,此监控页面去除该服务器的监控图表。监控信息分页显示,默认每页显示5条记录,当服务器......