用好了 defineProps 才叫会用 Vue3,90% 的写法都错了
‍ 写在开头点赞 收藏 学会Vue 3 的 Composition API 给开发者带来了更强的逻辑组织能力但很多人用 defineProps 的方式依然停留在 Vue 2 的“Options 语法心智”。本质上只是把 props: {} 拿出来“提前声明”并没有真正理解它的运行机制、类型推导优势、默认值处理方式、解构陷阱等关键点。这篇文章不做语法搬运而是用实战视角带你了解defineProps 到底该怎么写才是专业的 Vue3 写法。 为什么说你用错了 defineProps我们先来看一个常见的 Vue3 组件写法script setup const props defineProps({ title: String, count: Number }) /script你以为这就完事了它只是基本写法。但在真实业务中我们往往会遇到需要传默认值想要类型推导解构 props 却发现响应性丢失TS 类型重复声明不够优雅这些问题defineProps 其实早就帮你解决了只是你没用对方式。✅ 正确的三种 defineProps 写法① 写法一声明式类型推导推荐interface Props { title: string count?: number } const props definePropsProps()优点自动获得类型推导在这是 Composition API 的推荐写法完全由 TypeScript 驱动而不是运行时校验。② 写法二运行时代码校验Options 式const props defineProps({ title: { type: String, required: true }, count: { type: Number, default: 0 } })优点保留 Vue2 的 props 校验逻辑更适合 JS-only 项目不使用 TS缺点类型推导不如泛型直观与 withDefaults 不兼容③ 写法三与 withDefaults 配合实战最常见const props withDefaults(defineProps{ title?: string count?: number }(), { title: 默认标题, count: 1 })优势是既能获得类型推导又能写默认值不会重复写 default比纯 defineProps 更简洁易维护注意withDefaults 只能配合泛型式 defineProps 使用不能和对象式 props 写法混用。⚠️ 高发误区警告你踩过几个 误区 1直接解构 props响应性丢失const { title, count } defineProps{ title: string, count: number }()上面的写法会让 title 和 count 成为普通变量不是响应式的。解决方式使用 toRefsconst props defineProps{ title: string, count: number }() const { title, count } toRefs(props)这样才能在 watch(title, …) 中有效监听变化。 误区 2类型和默认值重复声明const props defineProps({ title: { type: String as PropTypestring, // 写了类型 default: Hello // 又写默认值 } })在 TS 项目中这种方式显得繁琐且不智能。建议直接用泛型 withDefaults让 IDE 自动推导类型。 误区 3没有区分“开发期类型检查” vs “运行时校验”Vue3 的 Props 有两个模式TypeScript 模式靠 IDE 编译器Options 模式在浏览器运行时报错实际推荐生产环境靠 TypeScript 检查即可无需运行时 Props 校验提高性能。 defineProps 是真正的组件契约声明在 Vue3 的它声明了组件的“输入规范”它决定了类型校验、默认值逻辑它是组件文档的第一手来源你越是随便写它越容易在团队协作时踩坑。 defineProps 的进阶技巧你未必知道的几个点✔ 你可以在 defineProps 里使用类型别名type Size sm | md | lg withDefaults(defineProps{ size?: Size }(), { size: md })这是让 props.size 具备完整类型提示的关键方式。✔ 配合 defineEmits 写法更完整const emit defineEmits{ (e: submit, value: number): void (e: cancel): void }()这样写出的组件输入props 输出emit都具备契约可以被任何 IDE 精确识别。✔ defineProps 写法决定你能不能使用 Volar 的类型推导很多人发现 里没有类型提示大概率是你组件没有正确写 defineProps 的泛型。保持结构清晰是让 IDE 吃得饱的唯一方式。 小结defineProps 不只是 props它是组件健壮性的开端正确思路是在 TypeScript 项目中尽可能采用 defineProps() withDefaults() 写法做到类型明确、默认值清晰、响应式安全。 怎么判断你是否“真的会用 defineProps”❌ 你写了 defineProps 但 props 解构不响应❌ 你写 default 写得很痛苦❌ 你项目里 props 写法风格混乱❌ 你的组件在 IDE 中没有 props 自动补全✅ 如果你能做到使用泛型 withDefaults保持 props 和 emits 的契约完整清晰地类型提示和响应性解构那恭喜你是真的理解了 Vue3 的组件心智模型。如果对您有所帮助欢迎您点个关注我会定时更新技术文档大家一起讨论学习一起进步。

相关新闻

Linux和macOS 常用包安装工具梳理

Linux和macOS 常用包安装工具梳理

文章目录一、为什么需要包安装工具二、Linux 与 macOS 常见包安装工具三、Linux 各发行版对应包管理工具四、yum 与 dnf 使用版本五、常见包管理命令对比1 安装软件2 更新软件仓库3 升级软件4 搜索软件5 卸载软件六、总结在 Linux 与 macOS 系统中,包安装工具&#…

2026/7/13 16:25:31 阅读更多 →
救命神器! 降AIGC工具 千笔·降AIGC助手 VS WPS AI 专科生专属

救命神器! 降AIGC工具 千笔·降AIGC助手 VS WPS AI 专科生专属

在AI技术迅速发展的今天,越来越多的专科生开始借助AI工具辅助完成论文写作,以提高效率和内容质量。然而,随着各大查重系统对AI生成内容的识别能力不断提升,论文中的“AI率”问题逐渐成为影响毕业的关键隐患。许多学生在使用AI工具…

2026/7/11 21:42:15 阅读更多 →
给大一的建议

给大一的建议

1、军训的时候一点要做好防晒,不然后面脸过敏超级严重2、多参加志愿者服务,多参加活动3、上课的时候认真听讲,多记英语单词4、早点准备计算机二级考试,多考证书5、少熬夜,早睡早起,少吃外卖,不然…

2026/7/16 0:57:36 阅读更多 →

最新新闻

TLPI 第24 章 练习:Process Creation

TLPI 第24 章 练习:Process Creation

笔记和练习博客总目录见:开始读TLPI。 24-1 在一个程序执行以下一系列 fork() 调用之后,会产生多少个新进程(假设所有调用都成功)? fork(); fork(); fork(); 总共会有8个进程,新进程有7个。 如下图&#…

2026/7/16 9:10:04 阅读更多 →
Mac mini本地智能体实战:OpenClaw+飞书机器人零云依赖工作流

Mac mini本地智能体实战:OpenClaw+飞书机器人零云依赖工作流

1. 这不是“又一个AI工具链”,而是Mac mini上真正能落地的智能体工作流 它来了——这句话在技术圈里从来不是营销话术,而是某种临界点被击穿后的集体直觉。过去三个月,我用一台 Mac mini M2(16GB内存) 搭建了一套从本…

2026/7/16 9:08:03 阅读更多 →
MetaBlriGer V2.7实战:为任意拓扑角色注入MetaHuman级面部动画

MetaBlriGer V2.7实战:为任意拓扑角色注入MetaHuman级面部动画

1. 项目概述:打通MetaHuman与自定义角色的桥梁最近在做一个高保真数字人项目,客户要求角色既能拥有MetaHuman级别的细腻表情,又要保留其独特的、非标准化的面部拓扑结构。这听起来像是个不可能的任务,对吧?毕竟&#x…

2026/7/16 9:06:03 阅读更多 →
AI生成内容在社交媒体泛滥:LinkedIn长文超40%为AI创作

AI生成内容在社交媒体泛滥:LinkedIn长文超40%为AI创作

两个月前,我在浏览 LinkedIn 时注意到一个现象:那些看起来结构完美、用词精准的长篇职业分享,读起来总有一种奇怪的“光滑感”——没有拼写错误,没有语法问题,但就是缺少了真实经验带来的粗糙感和具体细节。起初我以为…

2026/7/16 9:04:02 阅读更多 →
DHT11温湿度传感器实战指南:从时序解析到代码移植

DHT11温湿度传感器实战指南:从时序解析到代码移植

1. DHT11传感器基础认知 第一次接触DHT11是在五年前的一个智能家居项目上,当时需要低成本实现环境监测功能。这个火柴盒大小的传感器让我印象深刻——只需要三根线(VCC、GND、DATA)就能同时获取温湿度数据,成本还不到10块钱。不过…

2026/7/16 9:02:02 阅读更多 →
[镜像打包]Windows系统下将软件包制作成本地镜像源并实现内网分发

[镜像打包]Windows系统下将软件包制作成本地镜像源并实现内网分发

本文将详细拆解镜像站URL的结构原理,并指导如何在Windows系统下将特定软件包(如Qt)制作成本地镜像,供内网用户通过文件共享或Web服务器方式下载。一、镜像站URL结构解析 以 https://www.mirrorservice.org/sites/download.qt-proj…

2026/7/16 9:00:01 阅读更多 →

日新闻

HarmonyOs应用《重要日》开发第6篇 - 数据持久化存储

HarmonyOs应用《重要日》开发第6篇 - 数据持久化存储

本篇深入剖析 ImportantDays 项目的数据持久化方案——基于 HarmonyOS ArkData 模块的 Preferences 轻量级存储,以及 PreferenceUtil 工具类的单例封装。一、HarmonyOS 数据存储方案对比 HarmonyOS 提供了多种数据存储方案:方案适用场景特点Preferences轻…

2026/7/16 0:08:27 阅读更多 →
Python实现跨境电商商品图批量翻译教程

Python实现跨境电商商品图批量翻译教程

一、问题引入做跨境电商的卖家朋友,你是否遇到过这样的困扰?每次上架新品到亚马逊、Shopee或Lazada等平台,都需要处理大量商品图片的多语言版本。比如上架200款衣服,每款需要翻译成英语、日语、韩语等5种语言,这意味着…

2026/7/16 0:08:27 阅读更多 →
鸿蒙 7 新特性实战①:从 0 到 1 掌握 @kit 标准导入规范

鸿蒙 7 新特性实战①:从 0 到 1 掌握 @kit 标准导入规范

从鸿蒙 7(HarmonyOS NEXT)开始,官方全面完成了从 ohos.* 零散模块到 kit.* 领域套件的体系重构。对开发者来说,第一道门槛不是 API 用法变化,而是统一的导入规范——旧体系默认导入、解构导入混用的混乱局面被彻底终结…

2026/7/16 0:10:29 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/15 21:09:01 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/15 19:42:20 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/15 17:52:08 阅读更多 →

月新闻