Vue 3.3发布总结:重点功能全面解读

Vue 3.3已发布,本版本持续改进开发者体验,新增语法和宏定义,以及TypeScript支持。

本版本包含泛型组件定义插槽emit类型定义组件选项,以及实验性功能如响应式props解构和定义模型语法糖。本版本还废弃了Reactivity Transform

  • 新的宏定义之一defineOptions用于定义Options API选项,可用于定义除propsemitsexposeslot之外的任何选项。
  • 另一个新功能是hoistStatic,它通过将常量声明提升到顶层来优化SFC编译器
  • defineModel是一个新的语法糖宏,用于定义双向绑定props。

泛型组件

泛型组件现在支持从外部导入TypeScript类型定义props和emits,解决了之前只能使用本地类型的限制。
例如:

import type { Props } from './foo'

defineProps<Props & { extraProp?: string }>()

你也可以从第三方包或全局.d.ts文件导入类型。但是,条件类型仍不支持。

defineEmits

之前,defineEmits的类型参数只支持调用签名语法:

defineEmits<{
  (event: 'click', ...args: any[]): void
}>()

3.3引入了更友好的方式来声明带有类型的emit:

defineEmits<{
  'click': (x: number, y: string) => void 
}>()

在类型字面量中,键是事件名称,值是指定额外参数的数组类型。尽管不是必需的,但你可以使用infer显式,如上例所示。
调用签名语法仍然受支持。

定义插槽类型

定义插槽类型是一个全新的功能,用于定义插槽的类型,对复杂组件很有用。

例如:

defineProps<{data: T[]}>()  
defineSlots<{default(props: {item: T}): any}>()

使用:

<Paginator :data="[1, 2, 3]">  
	<template #default="{ item }">{{ item }}</template>
</Paginator>

定义组件选项

定义组件选项允许你直接在setup()中使用defineOptions()定义组件名,无需在script setup之外使用script。

例如:

defineOptions({
  name: 'Foo'  
}) 

响应式Props解构实验性功能

响应式Props解构是一个实验性功能,可以简化Props解构和设置默认值的语法。

例如:

const { msg = 'hello' } = defineProps(['msg'])

defineModel实验性功能

defineModel 相对于之前大量的update:modelValue写法,极大的简化的开发人员的使用心智

<script setup>
const modelValue = defineModel()
</script>

<template>
  <input v-model="modelValue" />
</template>

除此之外,本版本还包含提升静态常量加速构建测试生成类型定义文件等编译器优化和基础设施更新。Vue现在支持指定JSX命名空间,以解决与React等库的JSX类型推断冲突。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农飞上天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值