欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > Vue3.5新版本特性一览-数组操作10倍性能提升+响应式属性解构+自定义组件优化+ssr水合改善+teleport支持defer!

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

2025/4/30 3:32:32 来源:https://blog.csdn.net/m0_38015699/article/details/144185189  浏览:    关键词:Vue3.5新版本特性一览-数组操作10倍性能提升+响应式属性解构+自定义组件优化+ssr水合改善+teleport支持defer!

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?: numbermsg?: string}>(),{count: 0,msg: 'hello'}
)

现在:

const { count = 0, msg = 'hello' } = defineProps<{count?: numbermsg?: 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进入了稳定器

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词