你的 Vue 3 defineProps(),VuReact 会编译成什么样的 React?

VuReact 是一个能将 Vue 3 代码编译为标准、可维护 React 代码的工具。今天就带大家直击核心:Vue 中常见的 defineProps 宏经过 VuReact 编译后会变成什么样的 React 代码?

前置约定

为避免示例代码冗余导致理解偏差,先明确两个小约定:

  1. 文中 Vue / React 代码均为核心逻辑简写,省略完整组件包裹、无关配置等内容;
  2. 默认读者已熟悉 Vue 3 中 defineProps 的 API 用法与核心行为。

编译对照

Vue defineProps<{ ... }>() → React props 类型 + props 参数

defineProps 是 Vue 3 <script setup> 中用于声明组件输入属性的宏,它既允许类型参数声明,也支持运行时声明形式。VuReact 会将它编译为 React 中的 props 类型声明,并将组件参数改写为 props

  • Vue 代码:
html 复制代码
<script setup lang="ts">
  const props = defineProps<{ id: string; enabled?: boolean }>();
</script>
  • VuReact 编译后 React 代码:
tsx 复制代码
type ICompProps = {
  id: string;
  enabled?: boolean;
};

const Comp = (props: ICompProps) => {
  // ...
};

从示例可以看到:Vue 的 defineProps 并不会直接编译为某个运行时 Hook,而是转换为 React 中标准的 props 类型和组件参数。VuReact 会将 defineProps 中的类型信息提取为独立的 props 类型定义,保持类型安全与 React 组件 Props 规范一致


Vue defineProps('foo', 'bar') / defineProps({ ... }) → React props 推导

除了类型参数形式,defineProps 还支持数组和对象形式的运行时声明。VuReact 会对这些形式进行类型推导,并在可行的情况下将结果映射到 React 的 props 类型。

  • Vue 代码:
html 复制代码
<script setup>
  const props = defineProps(['foo', 'bar']);
</script>
  • React 输出(示意):
tsx 复制代码
type ICompProps = {
  foo?: any;
  bar?: any;
};

const Comp = (props: ICompProps) => {
  // ...
};

若使用对象形式声明,编译器也会尽量保留类型推导。虽然这两种形式可用,但推荐优先使用类型参数形式,因为它在 React 端的类型提示更清晰、结果更可控。

🔗 相关资源


✨ 如果你觉得本文对你理解 VuReact 有帮助,欢迎点赞、收藏、关注!

相关推荐
Bs_MoneyMagnet9 小时前
基于springboot+vue的医疗健康便民服务平台的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring
老苗项目实战13 小时前
Java工程师高频面试题(基于近一年的真实面试记录整理)
java·开发语言·面试·预见猿份·老苗项目实战
边境悍匪15 小时前
蜗牛学苑 Java 智能体学习 Day40|Vue 工程化与 ElementPlus 思维导图复盘
java·vue.js·学习
vx-Biye_Design15 小时前
springboot中国传统节日宣传平台49078-计算机课程设计、毕业设计
java·前端·vue.js·spring boot·后端·课程设计·idea
haon112217 小时前
海外信贷的策略全生命周期:从准入到还款的本地化布防
大数据·开发语言·深度学习·面试·职场和发展·产品经理
代码调试师18 小时前
【毕设分享】springboot攀枝花生鲜电商平台58990
java·vue.js·spring boot·后端·架构·eclipse·课程设计
蒸蒸yyyyzwd18 小时前
cpp 选手备战秋招学习笔记 day32
c++·笔记·面试
麻辣布丁18 小时前
java集合篇面试模拟
java·开发语言·面试
web打印社区18 小时前
Vue3 发票静默打印,我这边能跑通的一版
前端·javascript·vue.js·chrome·electron
妖孽白小白19 小时前
el-select的内容续写实现
前端·vue.js·elementui