UTILS.
100% 浏览器内运行
🎨

SVG 转 JSX 组件

将原始 SVG 标记转换为可直接使用的 React 组件,带驼峰式属性、props 展开,以及可选的 currentColor 和 forwardRef。

— 输出将显示在这里 —

关于此工具

SVG 转 JSX 组件工具可将原始 SVG 标记转换为整洁的 React 组件,方式与 SVGR 类似,但完全在你的浏览器中进行,不上传任何内容。粘贴从设计工具导出的图标,即可获得可导入并设置样式的组件。它用 DOMParser 解析 SVG,并在标记格式错误时报告清晰的错误。

每个带连字符或命名空间的 SVG 属性都会转为其 React 名称的驼峰式——stroke-width 转为 strokeWidth,fill-rule 转为 fillRule,clip-path 转为 clipPath,stop-color 转为 stopColor,xlink:href 转为 xlinkHref,xmlns:xlink 转为 xmlnsXlink——而 data-* 和 aria-* 属性保持原样。内联样式字符串变为样式对象,像 path 和 circle 这样的空元素会自闭合,props 会展开到根 <svg {...props}> 上,使组件保持可配置。可选开关让你用 currentColor 替换硬编码的 fill 和 stroke 值(使图标继承文本颜色),去除 width 和 height 使其缩放至容器大小,并用 forwardRef 包裹组件以暴露底层的 <svg> 节点。

可选择 JavaScript 或 TypeScript 输出:TypeScript 变体将 props 类型标注为 React.SVGProps<SVGSVGElement>,在启用 forwardRef 时使用 forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>。组件以导出的箭头函数形式输出(export const Icon = (props) => (...)),带有你所选的名称和缩进,可直接粘贴到图标模块中。

常见问题

SVG 属性如何转换?
带连字符和冒号命名空间的属性会转为其 React 等价的驼峰式:stroke-width 转为 strokeWidth,fill-rule 转为 fillRule,xlink:href 转为 xlinkHref。data-* 和 aria-* 属性会保留。内联样式变为样式对象。
currentColor 选项有什么作用?
它用 "currentColor" 替换硬编码的 fill 和 stroke 颜色值(none 以外的任何值),使 SVG 继承周围的文本颜色,并可通过父级上的普通 CSS color 重新着色。
为什么要将 props 展开到 svg 上?
将 {...props} 展开到根 <svg> 上,可让调用方向组件传递 className、width、onClick、aria 标签以及任何其他 SVG props。启用 forwardRef 后,ref 也会被转发到底层元素。
JS 和 TS 输出有什么区别?
TypeScript 输出将 props 类型标注为 React.SVGProps<SVGSVGElement>,启用 forwardRef 时使用 forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>。JavaScript 输出省略了类型标注,但其余完全相同。

更多工具