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

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

前置约定

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

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

编译对照

Vue useAttrs() → React props 引用

useAttrs 是 Vue 3 中用于获取未在 defineProps 中声明的透传属性的 API。在 React 中,所有属性都统一通过 props 传递,因此 VuReact 会将 useAttrs() 编译为对 props 的引用。

小提示:若组件未声明任何 props,VuReact 会自动补全组件参数 propsprops: Record<string, unknown>

  • Vue 代码:
html 复制代码
<script setup lang="ts">
  const attrs = useAttrs();
</script>
  • VuReact 编译后 React 代码:
tsx 复制代码
const attrs = props as Record<string, unknown>;

从示例可以看到:Vue 的 useAttrs() 被编译为 React 中对 props 的直接引用。VuReact 会保留 useAttrs 的运行时含义,同时将其与 React 的 Props 机制自然对接。

Vue useAttrs() 与 TypeScript 类型处理

VuReact 会根据场景自动补齐 useAttrs() 的类型信息,确保 React 端类型提示正常。

  • Vue 代码:
html 复制代码
<script setup lang="ts">
  interface Attrs {
    class?: string;
    style?: string;
    [key: string]: unknown;
  }
  const attrs = useAttrs();
  const { style, class: cls } = useAttrs() as Attrs;
  const typeAnnotation: Attrs = useAttrs();
</script>
  • VuReact 编译后 React 代码:
tsx 复制代码
interface Attrs {
  class?: string;
  style?: string;
  [key: string]: unknown;
}
const attrs = props as Record<string, unknown>;
const { style, class: cls } = props as Attrs;
const typeAnnotation = props as Attrs;

VuReact 会在可用时对 useAttrs() 添加类型断言或保留显式注解,从而让 React 中的 attrs 访问保持类型安全。

Vue useAttrs() 在纯 JavaScript 场景

在纯 JavaScript 环境中,VuReact 会将 useAttrs() 直接替换为对 props 的引用。

  • Vue 代码:
html 复制代码
<script setup>
  const attrs = useAttrs();
</script>
  • VuReact 编译后 React 代码:
ts 复制代码
const attrs = props;

这意味着在 JS 场景下,attrs 仍然是 React 组件接收的 props 对象,行为上与 Vue 的透传属性访问保持一致。

相关资源

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

相关推荐
lee_curry1 小时前
AI Agent 工程师完整学习路线(面向生产级项目与面试)
人工智能·学习·ai·面试·agent
江湖十年1 小时前
在 Go 中使用 dyno 包处理动态对象
后端·面试·go
数智启示录2 小时前
PostgreSQL 内存调优实战(第 12 篇):work_mem 只调大 64 倍,峰值为什么远不止 64 倍
运维·数据库·经验分享·postgresql·面试
刀法如飞4 小时前
《理解道德经》简版第5章:天地不仁,以万物为刍狗
面试·机器人
weixin_422555425 小时前
el-menu子菜单点击就被激活,恢复之前的激活状态
javascript·vue.js·elementui
wuyk5555 小时前
107.FreeRTOS 链表深度解析:从原理到面试满分答案
c语言·开发语言·数据结构·stm32·单片机·链表·面试
l1m0_6 小时前
智能电动自行车管理后台实战:AI生成页面与React组件化技巧
前端·react.js·ui·ai·设计
坚果的博客6 小时前
认识 CPF-RN:React Native 鸿蒙官方社区与四大核心仓库
react native·react.js·harmonyos
honkun67 小时前
vue 表格组件 vxe-table 实现拖拽列字段自动生成透视表汇总
前端·javascript·vue.js
数智启示录7 小时前
PostgreSQL 执行计划实战(第 9 篇):SQL 和索引没变,计划为什么突然慢一百倍
数据库·经验分享·sql·postgresql·面试