UTILS.
100 % dans le navigateur
🎨

SVG vers composant JSX

Transformez un balisage SVG brut en composant React prêt à l'emploi avec attributs camelCase, diffusion des props, et currentColor et forwardRef optionnels.

— la sortie apparaît ici —

À propos de cet outil

L'outil SVG vers composant JSX convertit un balisage SVG brut en un composant React propre, à la manière de SVGR, mais entièrement dans votre navigateur sans rien téléverser. Collez une icône exportée d'un outil de design et obtenez un composant que vous pouvez importer et styliser. Il analyse le SVG avec DOMParser et signale une erreur claire si le balisage est malformé.

Chaque attribut SVG à trait d'union ou avec espace de noms est mis en camelCase vers son nom React — stroke-width vers strokeWidth, fill-rule vers fillRule, clip-path vers clipPath, stop-color vers stopColor, xlink:href vers xlinkHref, xmlns:xlink vers xmlnsXlink — tandis que les attributs data-* et aria-* sont laissés tels quels. Les chaînes de style en ligne deviennent des objets de style, les éléments vides comme path et circle sont auto-fermés, et les props sont diffusées sur la racine <svg {...props}> pour que le composant reste configurable. Des bascules optionnelles vous permettent de remplacer les valeurs fill et stroke codées en dur par currentColor (pour que l'icône hérite de la couleur du texte), de retirer les width et height pour qu'elle s'adapte à son conteneur, et d'envelopper le composant avec forwardRef pour exposer le nœud <svg> sous-jacent.

Choisissez une sortie JavaScript ou TypeScript : la variante TypeScript type les props en React.SVGProps<SVGSVGElement> et, avec forwardRef activé, utilise forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>. Le composant est émis en fonction fléchée exportée (export const Icon = (props) => (...)), avec le nom et l'indentation de votre choix, prêt à coller dans un module d'icônes.

Foire aux questions

Comment les attributs SVG sont-ils convertis ?
Les attributs à trait d'union et à espace de noms par deux-points sont mis en camelCase vers leurs équivalents React : stroke-width vers strokeWidth, fill-rule vers fillRule, xlink:href vers xlinkHref. Les attributs data-* et aria-* sont préservés. Les styles en ligne deviennent des objets de style.
Que fait l'option currentColor ?
Elle remplace les valeurs de couleur fill et stroke codées en dur (tout sauf none) par "currentColor", pour que le SVG hérite de la couleur du texte environnant et puisse être recoloré avec une simple couleur CSS sur le parent.
Pourquoi diffuser les props sur le svg ?
Diffuser {...props} sur la racine <svg> permet aux appelants de passer className, width, onClick, des libellés aria et toute autre prop SVG au composant. Avec forwardRef activé, une ref est aussi transmise à l'élément sous-jacent.
Quelle est la différence entre la sortie JS et TS ?
La sortie TypeScript type les props en React.SVGProps<SVGSVGElement>, et avec forwardRef elle utilise forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>. La sortie JavaScript omet les annotations de type mais est par ailleurs identique.

Plus d'outils