UTILS.
100% en el navegador
🎨

SVG a componente JSX

Convierte marcado SVG en bruto en un componente React listo para usar, con atributos en camelCase, propagación de props, y currentColor y forwardRef opcionales.

— la salida aparece aquí —

Acerca de esta herramienta

La herramienta SVG a componente JSX convierte marcado SVG en bruto en un componente React limpio, como lo hace SVGR, pero enteramente en tu navegador sin nada subido. Pega un icono exportado desde una herramienta de diseño y obtén un componente que puedes importar y estilizar. Analiza el SVG con DOMParser e informa de un error claro si el marcado está mal formado.

Cada atributo SVG con guion o con espacio de nombres se pasa a camelCase a su nombre React —stroke-width a strokeWidth, fill-rule a fillRule, clip-path a clipPath, stop-color a stopColor, xlink:href a xlinkHref, xmlns:xlink a xmlnsXlink— mientras que los atributos data-* y aria-* se dejan tal cual. Las cadenas de estilo en línea pasan a objetos de estilo, los elementos vacíos como path y circle se autocierran, y las props se propagan al root <svg {...props}> para que el componente siga siendo configurable. Interruptores opcionales te permiten reemplazar los valores fijos de fill y stroke con currentColor (para que el icono herede el color del texto), quitar el width y height para que escale a su contenedor, y envolver el componente con forwardRef para exponer el nodo <svg> subyacente.

Elige salida JavaScript o TypeScript: la variante TypeScript tipa las props como React.SVGProps<SVGSVGElement> y, con forwardRef activado, usa forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>. El componente se emite como una función flecha exportada (export const Icon = (props) => (...)), con tu nombre e indentación elegidos, listo para pegar en un módulo de iconos.

Preguntas frecuentes

¿Cómo se convierten los atributos SVG?
Los atributos con guion y con espacio de nombres por dos puntos se pasan a camelCase a sus equivalentes React: stroke-width a strokeWidth, fill-rule a fillRule, xlink:href a xlinkHref. Los atributos data-* y aria-* se preservan. Los estilos en línea pasan a objetos de estilo.
¿Qué hace la opción currentColor?
Reemplaza los valores de color fijos de fill y stroke (cualquier cosa distinta de none) con "currentColor", para que el SVG herede el color del texto circundante y pueda recolorearse con un simple color CSS en el padre.
¿Por qué propagar props al svg?
Propagar {...props} al root <svg> permite a quienes lo llaman pasar className, width, onClick, etiquetas aria y cualquier otra prop SVG al componente. Con forwardRef activado, también se reenvía una ref al elemento subyacente.
¿Cuál es la diferencia entre la salida JS y TS?
La salida TypeScript tipa las props como React.SVGProps<SVGSVGElement>, y con forwardRef usa forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>. La salida JavaScript omite las anotaciones de tipo pero por lo demás es idéntica.

Más herramientas