[翻译] Vue 3.5 发布

news2024/9/26 3:22:29

翻译自 vue 官方博客
地址:https://blog.vuejs.org/posts/vue-3-5

今天,我们很高兴地宣布 Vue 3.5 “Tengen Toppa Gurren Lagann” 发布!

此次要版本不包含任何重大更改,并且包括内部改进和有用的新功能。我们将在这篇博文中介绍一些亮点 - 有关更改和新功能的完整列表,请查阅 GitHub 上的完整变更日志。

响应式系统优化

在 3.5 中,Vue 的反应性系统经历了另一次重大重构,实现了更好的性能并显着提高了内存使用率 ( -56% ),而行为没有变化。重构还解决了 SSR 期间因计算挂起而导致的陈旧计算值和内存问题。

此外,3.5 还优化了大型、深度反应阵列的反应跟踪,在某些情况下使此类操作速度提高了 10 倍。

详细信息: PR#10397 , PR#9511

响应式的 Props 解构

Reactive Props Destruction 已在 3.5 中稳定下来。现在默认启用该功能,从 <script setup> 中的defineProps 调用解构的变量现在是反应性的。值得注意的是,此功能通过利用 JavaScript 的本机默认值语法,显着简化了使用默认值声明 props 的过程:

之前:

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

现在:

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

对解构变量(例如 count )的访问会由编译器自动编译到 props.count 中,因此在访问时会跟踪它们。与props.count 类似,观察解构的 prop 变量或将其传递到可组合项同时保留反应性需要将其包装在 getter 中:

watch(count /* ... */)
//    ^ results in compile-time error

watch(() => count /* ... */)
//    ^ wrap in a getter, works as expected

// composables should normalize the input with `toValue()`
useDynamicCount(() => count)

对于那些喜欢更好地区分解构属性和普通变量的人来说, @vue/language-tools 2.1 版本提供了一个可选设置来为它们启用嵌入提示:
在这里插入图片描述

详细信息

  • 有关用法和注意事项,请参阅文档。
  • 有关此功能背后的历史和设计原理,请参阅RFC#502 。

SSR 改进

3.5 为服务器端渲染 (SSR) 带来了一些期待已久的改进。

Lazy Hydration

异步组件现在可以通过 defineAsyncComponent() API 的 hydrate 选项指定策略来控制何时应进行 Hydrated。例如,仅在组件可见时对其进行水合:

import { defineAsyncComponent, hydrateOnVisible } from 'vue'

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

核心 API 有意设置为较低级别,Nuxt 团队已经在此功能的基础上构建了更高级别的语法糖。

详细信息: PR#11458

useId()

useId() 是一个 API,可用于生成每个应用程序唯一的 ID,并保证在服务器和客户端渲染中保持稳定。它们可用于生成表单元素和可访问性属性的 ID,并可在 SSR 应用程序中使用,而不会导致水合作用不匹配:

<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>

您还可以通过向属性提供值来限制允许的不匹配类型,其中可能的值为textchildrenclassstyleattribute

自定义元素改进

3.5 修复了许多与defineCustomElement() API 相关的长期存在的问题,并添加了许多使用 Vue 创作自定义元素的新功能:

  • 通过 configureApp 选项支持自定义元素的应用程序配置。
  • 添加 useHost()useShadowRoot()this.$host API 用于访问自定义元素的宿主元素和影子根。
  • 通过传递 shadowRoot: false 支持在没有 Shadow DOM 的情况下挂载自定义元素。
  • 支持提供 nonce 选项,该选项将附加到自定义元素注入的 <style> 标签。

这些新的仅自定义元素选项可以通过第二个参数传递给 defineCustomElement

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

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

其他功能

useTemplateRef()

3.5 引入了一种通过 useTemplateRef() API 获取模板引用的新方法:

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

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

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

在 3.5 之前,我们建议使用纯引用,其变量名称与静态 ref 属性匹配。旧方法要求编译器可以分析 ref 属性,因此仅限于静态 ref 属性。相比之下, useTemplateRef() 通过运行时字符串 ID 匹配引用,因此支持动态引用绑定到更改的 ID。

@vue/language-tools 2.1 还实现了对新语法的特殊支持,因此在使用 useTemplateRef() 时,您将根据模板中是否存在 ref 属性获得自动完成和警告:
在这里插入图片描述

延迟传送(Deferred Teleport)

内置 <Teleport> 组件的一个已知约束是其目标元素在安装传送组件时必须存在。这可以防止用户在传送后将内容传送到 Vue 渲染的其他元素。

在 3.5 中,我们为<Teleport>引入了defer属性,它会在当前渲染周期之后安装它,因此现在可以使用:

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

此行为需要defer属性,因为默认行为需要向后兼容。

详细信息: PR#11387

onWatcherCleanup()

3.5 引入了全局导入的 API onWatcherCleanup() ,用于在观察者中注册清理回调:

import { watch, onWatcherCleanup } from 'vue'

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

  fetch(`/api/${newId}`, { signal: controller.signal }).then(() => {
    // callback logic
  })

  onWatcherCleanup(() => {
    // abort stale request
    controller.abort()
  })
})

相关:有关副作用清理的新文档部分。

有关 3.5 中的更改和功能的完整列表,请查看GitHub 上的完整更改日志。

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

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

相关文章

ETL数据集成丨MySQL到MySQL的数据迁移实践

前言 MySQL数据迁移至另一MySQL数据库的过程&#xff0c;不仅是数据复制或移动的操作那么简单&#xff0c;它还涉及到一系列策略性考量和技术优化&#xff0c;旨在实现数据的高效、安全传输&#xff0c;以及确保目标系统的高性能运行。其深远意义在于为企业的数字化转型提供强…

智慧水务建设的基本内容

智慧水务解决方案的主要对象客户是全国各地水务投资集团、水务局、水司、水厂、农水办,也会有少量项目涉及到住建局或城管局。解决方案通常会以具体的某个业务单位的职能工作为切入点,配合物联感知、大数据分析、人工智能等技术手段,为城市供水、乡村供水的水质安全、供水调…

纯CSS实现海浪文字效果

如图所示&#xff0c;这是一个很炫酷的文字波动效果&#xff0c;文字呈现出一个海浪波动的效果&#xff0c;这样的动画效果可以显著加强文案本身的含义。本文将解析如何使用纯CSS实现这个特效&#xff0c;基于这个动图可以分析出实现这个效果的主要功能要点&#xff1a; 整体呈…

室内小间距LED显示屏操作指南

随着LED显示技术的迅速发展&#xff0c;小间距LED显示屏在城市的各个角落逐渐普及。它不仅提升了城市形象&#xff0c;还丰富了人们的日常生活。小间距LED显示屏以其高清、节能等特点&#xff0c;广泛应用于各类室内场景&#xff0c;如会议室、展览馆、指挥中心等。然而&#x…

嵌入式鸿蒙系统开发语言与开发方法分析

大家好,今天主要给大家分享一下,HarmonyOS系统的主力开发语言ArkTS语言开发方法,它是基于TypeScript(简称TS)语言扩展而来。 第一:ArkTS语言基本特性 目的:声明式UI,让开发者以更简洁,更自然的方式开发高性能应用。 声明式 UI基本特性: 基本UI描述:ArkTS定义了各种装饰…

【STM32 Blue Pill编程】-定时器输入捕获与频率计数

定时器输入捕获与频率计数 文章目录 定时器输入捕获与频率计数1、定时器介绍2、硬件准备及接线2、模块配置2.1 定时器配置2.2 串口配置3、信号频率测量计算4、代码实现在本文中,将介绍在STM32CubeIDE中配置定时器的工作模式为输入捕获模式,并通过编程对外部输入信号进行频率计…

Prompt工程师压箱底绝活——Prompt的基本组成部分、格式化输出与应用构建

目前&#xff0c;大模型输出往往包含许多冗余信息。本文中&#xff0c;基于文心一言&#xff0c;我们给出了一种包含指令、输入数据、背景信息和输出提示的提示词结构&#xff0c;让大模型能够真正直击应用开发者的需求&#xff0c;严格执行开发者的指令&#xff0c;为大模型的…

opencv实战项目二十二:模板匹配定位对象位置

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、opencv模板匹配介绍二、使用代码三、效果 前言 在现代计算机视觉领域&#xff0c;模板匹配是一种基础而强大的技术&#xff0c;它能够帮助我们在图像中找到…

k8s服务发布Ingress

Kubernetes暴露服务的方式目前只有三种&#xff1a;LoadBlancer Service、NodePort Service、Ingress&#xff0c;通俗来讲&#xff0c;ingress和之前提到的Service、Deployment&#xff0c;也是一个k8s的资源类型&#xff0c;ingress用于实现用域名的方式访问k8s内部应用。 In…

第 6 章图像聚类

本章将介绍几种聚类方法&#xff0c;并展示如何利用它们对图像进行聚类&#xff0c;从而寻找相似的图像组。聚类可以用于识别、划分图像数据集&#xff0c;组织与导航。此外&#xff0c;我们还会对聚类后的图像进行相似性可视化。 6.1 K-means聚类 K-means 是一种将输入数据划…

FLV 格式详解资料整理,关键帧格式解析写入库等等

FLV 是一种比较简单的视频封装格式。大致可以分为 FLV 文件头&#xff0c;Metadata元数据&#xff0c;然后一系列的音视频数据。 资料够多&#xff1a; FLV格式解析图 知乎用户 Linux服务器研究 画了一张格式解析图&#xff0c;比较全&#xff0c;但默认背景是白色&#xff…

2024年职业院校人工智能实训室方案解读(融入AIGC技术)

随着人工智能技术的飞速发展&#xff0c;职业院校作为技能型人才培养的重要基地&#xff0c;亟需加强人工智能实训室的建设&#xff0c;以应对市场需求和行业变革。该方案不仅涵盖了全面的人工智能教学内容&#xff0c;还融入了AIGC&#xff08;Artificial Intelligence Genera…

k8s笔记——kubebuilder实战

kubebuilder Kubebuilder 是一个基于 CRD 来构建 Kubernetes API 的框架&#xff0c;可以使用 CRD 来构建 API、Controller 和 Admission Webhook。 动机 目前扩展 Kubernetes 的 API 的方式有创建 CRD、使用 Operator SDK 等方式&#xff0c;都需要写很多的样本文件&#x…

​微图在线显示高程为什么与下载结果不一致

之前有客户向我们提出了在线显示的高程值和下载的数据高程值不一致的问题&#xff0c;这里解释一下不一致的原因。 在线显示 在线的情况分成两种&#xff0c;一种是浏览高程数据渲染地图&#xff0c;一种是非高程数据渲染地图&#xff0c;例如高清影像&#xff08;WGS84&…

小小GCD、LCM拿下拿下

目录 最大公约数&#xff08;GCD&#xff09; 最大公约数&#xff08;GCD&#xff09;求解&#xff1a; 一、辗转相除法 二、三目运算符 三、位运算 最大公约数&#xff08;GCD&#xff09;模板&#xff1a; 最大公约数&#xff08;GCD&#xff09;例题&#xff1a; 最…

SprinBoot+Vue酒店管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

安宝特方案 | 医疗AR眼镜,重新定义远程会诊体验

【AR眼镜&#xff1a;重新定义远程会诊体验】 在快速发展的医疗领域&#xff0c;安宝特医疗AR眼镜以其尖端技术和创新功能&#xff0c;引领远程会诊的未来&#xff0c;致力于为为医生和患者带来更高效、精准和无缝的医疗体验。 探索安宝特医疗AR眼镜如何在医疗行业中引领新风潮…

DolphinScheduler应用实战笔记

DolphinScheduler应用实战笔记 一、前言二、DS执行SQL或存储过程二、DS调用DataX同步数据三、DS调用HTTP接口四、DS依赖(DEPENDENT)节点五、DS SPARK 节点六、DS Flink 节点七、DS Flink 节点八、DS SQL 节点九、DS Java程序十、DS Python节点 一、前言 DolphinScheduler&…

Java实现在线聊天室

分为客户端和服务器端两个部分。服务器负责处理客户端之间的通信&#xff0c;客户端则提供一个用户界面来发送和接收消息。 技术栈 Java语言SocketSwingUI 要点 一个服务端&#xff0c;多台客户端每个客户端登录时输入用户名消息格式化&#xff1a;服务器接收到消息时&#…

数据资产管理:真能推动数据要素市场发展还是只是空谈?

数据资产管理&#xff1a;真能推动数据要素市场发展还是只是空谈&#xff1f; 前言数据资产管理 前言 数据已成为企业和组织的重要资产&#xff0c;其价值的充分发挥对于推动业务发展和提升竞争力至关重要。数据资产管理作为一种有效的管理手段&#xff0c;正逐渐受到广泛关注…