Skip to content

3.5 新特性

❗ 没有包含所有更新,只记录后续开发可能会用得到的改进

水合改进

useId

新引入一个 api: useId, 生成每个应用唯一的 ID, 确保在服务端和客户端渲染之间保持稳定:

vue
<script setup>
import { useId } from "vue";

const id = useId();
</script>

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

data-allow-mismatch

在某些情况下,客户端的值和服务端的值会不可避免的不同(如日期),可以使用新 api: data-allow-mismatch 来抑制水合不匹配的警告:

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

响应式解构

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

结构后得变量会自动编译为: props.var

useTemplateRef()

增加了一种新的模板引用方式: useTemplateRef()

Deferred Teleport

使用 teleport 传送时,引入 defer 属性,它会在当前渲染周期之后进行挂载

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

onWatcherCleanup()

引入一个新 api: onWatcherCleanup, 用于在 watch 中注册清理回调:

vue
<script setup>
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();
  });
});
</script>
2025( )
今日 8.33%
本周 42.86%
本月 48.39%
本年 4.11%
Powered by Snowinlu | Copyright © 2024- | MIT License