SVG 转 React JSX 组件转换器
指导
SVG 转 React JSX 组件转换器
粘贴原始 SVG 代码,即可获得一个干净的 React 函数组件。该工具对每个属性进行确定性的 camelCase 转换,移除非 JSX 语法,并将输出包裹在可导入的组件中——可选地添加类型,可选地包裹,也可通过属性进行缩放。所有操作都在您的浏览器中本地运行,因此您的图标和标志永远不会离开您的设备。 forwardRef- 包裹,可选地通过属性进行缩放。所有内容都在您的浏览器中运行,因此您的图标和标志永远不会离开您的机器。
如何使用
- 粘贴完整
<svg>…</svg>代码到输入框中。 - 设置组件名称(PascalCase,例如
ArrowRightIcon). - 切换 TypeScript,
forwardRef,可缩放大小属性和属性传播,以适应您的项目。 - 复制生成的 JSX 代码或将其下载为一个
.tsx/.jsx文件。
特征
- camelCase 属性 -
stroke-width变成strokeWidth,fill-rule变成fillRule,以此类推,覆盖整个 SVG 规范。 - 保留关键字处理 -
class被重写为className,for到htmlFor,并且xlink:href到xlinkHref. - 内联样式解析器 -
style="color: red; font-size: 12px"被转换为具有 camelCase 键的 JSX 样式对象。 - TypeScript 输出 – 在启用时生成
React.SVGProps<SVGSVGElement>类型定义。 - 可缩放图标模式 – 将硬编码的 width/height 替换为带有合理默认值的属性。
width且heightforwardRef 包裹器 - – 生成一个带有 的组件,供 DevTools 使用。
React.forwardRef属性传播displayName– 将任意属性传递到根元素 - ,以便消费者可以设置 ,ARIA 或事件处理器。
<svg>离线设计className– SVG 从未离开浏览器;没有上传,没有服务器往返。 - 为什么 React 和 JSX 会重写 SVG 属性名称? JSX 直接编译为 JavaScript 对象属性访问,而 JavaScript 标识符不能包含连字符。因此 React 统一采用 camelCase 属性名称,以匹配 DOM IDL — 例如,
常问问题
-
因为 DOM 以
的形式暴露它。少数属性(
stroke-width变成strokeWidth)与 JavaScript 保留关键字冲突,因此被重命名为(element.strokeWidth)以避免解析冲突。class,forReact.forwardRef 对 SVG 组件有什么作用?className,htmlFor默认情况下,函数组件无法从父级接收一个 -
——React 会静默忽略它。
通过 forwardRef,将底层 DOM 节点暴露给父级,这对于需要直接访问渲染出的
ref以进行聚焦管理、测量或与 Framer Motion 或 GSAP 等动画库集成至关重要。React.forwardRef为什么 SVG 应该作为 React 组件嵌入,而不是内联图片?<svg>将 SVG 嵌入为 JSX 可以让您完全控制 DOM 树:您可以使用 CSS 变量来主题笔触和填充,对路径进行动画,运行时切换颜色,并在构建时树状删除未使用的图标。一个 -
行为就像一个不透明的位图元素——您无法从宿主页面对其内部进行样式设置。
为什么将 width 和 height 作为属性而不是硬编码属性?
<img src="icon.svg">硬编码的像素尺寸会将图标固定在单一尺寸,使其在布局中组合时变得不灵活。将 -
作为属性暴露(通常与原始
配合使用)可以让消费者在工具栏中以 16px 的尺寸渲染,在英雄横幅中以 48px 的尺寸渲染,SVG 的矢量缩放在每个尺寸下都保持清晰。
width且heightMyIconviewBox在此处粘贴您的 ... 代码...
