Vue3.4 中组件 v-model 双向数据绑定 新玩法!!!

💡 原文中文,约3000字,阅读约需7分钟。
📝

内容提要

Vue3.4引入了defineModel API,简化了父子组件之间的双向数据绑定,是推荐的实现方式。它提供了更好的v-model修饰符支持。文章提供了不同场景下使用defineModel的示例。defineModel的引入标志着Vue开发体验的重要进展。

🔎

延伸解读

从实验到稳定:defineModel 的版本演进

defineModel 在 Vue 3.3 中作为实验性功能引入,使用时需在 vite.config.ts 中配置 defineModel: true。Vue 3.4 将其升级为稳定特性,无需额外配置即可直接使用。这一变化意味着开发者可以放心在生产环境中采用该 API,而不必担心实验性功能可能带来的不稳定性。

简化双向绑定的代码对比

在 Vue 3.4 之前,实现组件 v-model 需要手动声明 props 和 emits,并在模板中显式绑定 value 和 input 事件。使用 defineModel 后,子组件只需一行 const modelValue = defineModel(),模板中直接 v-model="modelValue" 即可。这减少了样板代码,降低了出错概率,让开发者更专注于业务逻辑。

多 v-model 绑定与修饰符处理

defineModel 支持在组件中定义多个双向绑定属性,例如 const title = defineModel('title'),父组件通过 v-model:title 使用。同时,通过解构 defineModel() 的返回值可以获取修饰符对象,并利用 set 转换器在同步回父组件前对值进行处理,如自动 trim。这为复杂表单场景提供了更灵活的支持。

❓

Q&A

Vue3.4中的defineModel API有什么作用?

defineModel API简化了父子组件之间的双向数据绑定,是官方推荐的实现方式。

如何在Vue3.4中使用defineModel进行双向绑定?

在组件中使用defineModel声明双向绑定的prop,通过父组件的v-model来使用。

defineModel支持多个双向绑定属性吗?

是的,组件中可以定义多个defineModel,以支持多个双向绑定属性。

defineModel如何处理v-model修饰符?

可以通过解构defineModel的返回值来获取v-model的修饰符,并根据需要进行值的转化。

defineModel在Vue3.4中有什么重要进展?

defineModel的引入标志着Vue在提升开发者体验方面的重要进展,简化了数据绑定的细节。

如何在Vue3.4中配置defineModel?

在vite.config.ts中配置defineModel为true,之前在Vue3.3中为实验性功能,现在在Vue3.4中已稳定。

🏷️

标签

➡️

继续阅读