Pourquoi convertir un SVG en composant React ?
Un SVG brut dans une app React a quelques bizarreries : `class` doit devenir `className`, les attributs avec tirets (`stroke-width`) passent en camelCase, la couleur est codée en dur dans le SVG. Si vous voulez rendre la même icône dans une autre couleur, il vous faut un second fichier. Une taille différente ? Encore un fichier, ou une surcharge CSS.
Un composant React avec props gère ça proprement : `<IconCheck size={20} color="red" />`. Un seul fichier, n'importe quelle couleur, n'importe quelle taille. Plus le forwarding `...props` : ajoutez `aria-label` ou `onClick` sans toucher au composant.
Collez votre SVG (Figma, Iconify, votre propre art), choisissez les options (TypeScript vs JSX, export nommé vs défaut, prop `color`/`size` ou non) et obtenez un composant prêt à copier. Téléchargez sous `.tsx` avec un nom de fichier correct ou copiez dans le presse-papiers.
Mode d'emploi
- Collez le code SVG dans le panneau de gauche. Ça peut être une icône (24x24), un logo, une illustration : n'importe quel SVG.
- Entrez un nom de composant (PascalCase, par exemple `IconCheck`, `LogoBrand`).
- Activez les options : TypeScript pour une version typée, default export ou named.
- À droite, vous obtenez le composant prêt. En dessous, un aperçu en direct avec la taille et la couleur actuelles.
- Cliquez sur « Copier » pour copier le code ou « Télécharger .tsx » pour enregistrer le fichier avec le bon nom.
Quand ça aide
Cas d'usage pratiques :
- Bibliothèque d'icônes d'un projet. Le designer exporte 30 icônes depuis Figma, vous en convertissez chacune et vous vous retrouvez avec un `components/icons/` plein de fichiers `.tsx`. Chaque icône a des props size/color et est theme-aware.
- Logo d'entreprise. Export depuis Illustrator, conversion, vous obtenez `<LogoBrand size={32} />` pour le header, le footer, les embeds sociaux.
- Icônes de statut. `<IconSuccess color="green" />`, `<IconError color="red" />` : un fichier, des couleurs différentes selon l'état.
- Illustrations hero personnalisées. Une illustration SVG dans la hero section, désormais un composant avec couleurs d'accent modifiables.
- Un remplacement de lucide-react / heroicons. Il vous faut parfois une icône qu'aucune bibliothèque ne fournit. Convertissez la vôtre.
- SVG à la compilation. En Next.js, un composant bat `<Image src="/icon.svg" />` : moins de requêtes, meilleur SSR.
- Prop forwarding. `<IconClose onClick={handleClose} aria-label="Close modal" />` : accessibilité et interaction en un seul geste.
D'abord, réduisez votre SVG avec l'optimiseur SVG. Pour HTML vers JSX, voir le convertisseur HTML vers JSX.