HTML 转 JSX 转换器

转换内容:class 转为 className、for 转为 htmlFor、内联样式转为 JSX 对象、自闭合空标签、移除 HTML 注释。

JSX 看起来像 HTML,但实际上并非如此:classclassNameforhtmlForstyle 是对象而不是字符串,并且每个空标签都必须自闭合。粘贴 HTML,此转换器就会生成一次编译通过的 JSX,让您无需花十分钟排查编译错误,就能把营销页面搬进 React 组件。

如何将 HTML 转换为 JSX

  1. 1

    粘贴 HTML

    可以是一个组件的标记,也可以是完整的页面片段。

  2. 2

    转换

    工具会将 `class`、`for`、`readonly` 等属性重命名为 JSX 写法,并将内联样式转换为对象。

  3. 3

    查看 JSX

    输出结果可直接粘贴到 `.jsx` 或 `.tsx` 文件中。

  4. 4

    复制并粘贴

    代码使用单行表达式,因此可以很好地融入现有组件。

每个值得注意的 HTML 与 JSX 差异

JSX 不是 HTML。它是编译为 React.createElement() 调用的 JavaScript 表达式,因此属性名称遵循 JavaScript 约定。

转换器会自动处理最常见的重命名。下面的完整列表是您手写 JSX 时需要的参考。

属性重命名

HTML JSX 备注
class className class 在 JS 中是保留字
for htmlFor for 是保留字
tabindex tabIndex 驼峰式命名
readonly readOnly 驼峰式命名
contenteditable contentEditable 驼峰式命名
stroke-width (SVG) strokeWidth 驼峰式命名
xlink:href xlinkHref 冒号命名空间被扁平化
aria-label aria-label ARIA 保留连字符
data-* data-* data 属性保留连字符

style 属性

HTML: style="color: red; padding: 10px"

JSX: style={{ color: 'red', padding: 10 }}

没有单位的数值会变成像素;百分比和 flex 这类无单位的值请保留为字符串。

自闭合空元素

HTML 允许 <br><input> 不带结束标签。JSX 要求 <br /><input />,每个元素都必须显式闭合。

注释

HTML 注释(<!-- -->)在 JSX 主体中无效。此转换器会将其删除;如需保留备注,请自行写成 {/* JavaScript 块注释 */}

布尔属性

HTML: <input checked>(或 <input checked="checked">

JSX: <input checked={true} /> 或直接写成 <input checked />。切勿传入字符串 “true”。

逃生通道

  • 不可信的 HTML 片段可以用 dangerouslySetInnerHTML={{ __html: ... }} 渲染,这个 API 故意做得难看,以劝阻大家使用。
  • 自定义 data-* 属性保持不变;非标准属性会原样传递,但在开发模式下可能触发 React 警告。

常见问题

stroke-width 之类的 SVG 属性在 JSX 中必须使用驼峰式命名(strokeWidth),并且每个标签都必须自闭合。转换器会自闭合 SVG 中的空标签,并将样式字符串中的属性名转为驼峰式,但不会重命名 SVG 属性;请手动将 stroke-width 改为 strokeWidth。对于一次性图标,最干净的做法是将图标保存为 SVG 文件,并通过 svgr 将其作为组件导入。

是的,JSX 和 TSX 都使用 className。唯一的例外是在 dangerouslySetInnerHTML 内部,原始 HTML 字符串会原样插入 DOM,因此保留 class

不会。输出仅包含 JSX 片段,没有 export default function 包装器,也没有类型注解。请将其粘贴到您的 .jsx.tsx 文件中,并自行添加 props、类型和包装器。class 仍会转换为 className,这正是 TSX 所期望的。

它们会原样传递,不做更改。转换器不会重命名事件处理器,因此请将 onclick 改为 onClick,并把字符串值替换为真正的函数,例如 onClick={() => doThing()}。您需要在组件作用域内定义 doThing 函数。

相关工具

此工具还提供其他语言版本