01
1. 为何要将 SVG 转为 JSX
React(JSX)的语法与 HTML/SVG 略有不同。带连字符的属性(stroke-width)必须写成 camelCase(strokeWidth),class 要写成 className,而 style 必须是 JavaScript 对象而非字符串。本工具会自动转换这些差异,使设计师导出的 SVG 图标可以直接粘贴到 React 组件中。
粘贴 SVG 标记,即可将其转换为可直接用于 React 组件的 JSX。它会将属性转为 camelCase(class→className),把 style 字符串转为对象,并去除注释和 DOCTYPE。
React(JSX)的语法与 HTML/SVG 略有不同。带连字符的属性(stroke-width)必须写成 camelCase(strokeWidth),class 要写成 className,而 style 必须是 JavaScript 对象而非字符串。本工具会自动转换这些差异,使设计师导出的 SVG 图标可以直接粘贴到 React 组件中。
它将 class→className、for→htmlFor 进行映射,把 stroke-width、fill-opacity 之类的连字符属性转为 camelCase,把 xlink:href 等带命名空间的属性转为 xlinkHref,并保留 data-/aria- 属性不变。style="fill:red;stroke-linecap:round" 会变成对象 style={{ fill: 'red', strokeLinecap: 'round' }},同时去除注释、DOCTYPE 和 XML 声明。
本工具不使用正则,而是用浏览器的 DOMParser 真正解析 SVG 后再重新序列化,因此能正确处理嵌套结构和属性。所有处理都在浏览器中完成,代码不会发送到服务器。将结果放入组件后,可按需调整,例如把 width/height 提取为 props,或将 fill 改为 "currentColor"。