把 SVG 变成可复用 TSX 组件

建立稳定的图标组件化流程,减少硬编码和跨项目差异。

直接粘贴 SVG 到代码里,常见问题是属性混乱、颜色不可控。按这份指南处理后,组件会更规范,也更好维护。

1)先标准化 SVG 输入

  • 先清理多余 group、metadata、内联样式。
  • 保留正确 viewBox,保证缩放可预测。
  • 重命名 ID 与 mask,避免多图标同页冲突。

2)生成类型安全组件

  • 基于 SVG props 扩展 TypeScript 类型,提升补全与约束。
  • 提供默认宽高并允许外部覆盖。
  • 将固定颜色替换为 currentColor,以适配主题与上下文颜色。

3)接入设计系统

  • 统一目录和导出方式,降低使用成本。
  • 在 CI 中加 lint 或测试,阻止非法属性进入主干。
  • 补充尺寸与 aria 示例,提升组件可用性。

SVG 转 React TypeScript 常见问题

图标颜色应该写死还是用 currentColor?
设计系统场景通常推荐 currentColor,便于由上层统一控制颜色。
组件 props 应该怎么定义类型?
可从 React.SVGProps<SVGSVGElement> 继承,再按需加自定义字段。
可访问性标签如何处理?
暴露 title 或 aria-label,纯装饰图标默认 aria-hidden。
转换前要先优化吗?
建议先优化,能减少噪音属性并得到更干净的 TSX。