
SVG → React : du fichier brut au composant prêt à l'emploi
Convertissez vos icônes SVG en composants React/JSX, optimisez-les et intégrez-les dans votre design system.
Pourquoi passer du SVG brut au composant React
Coller un SVG inline dans du JSX casse souvent au premier build : attributs HTML (`class`, `stroke-width`) incompatibles, balises `<style>` difficiles à maintenir, taille de fichier gonflée par un export Figma. L'convertisseur SVG vers JSX en ligne transforme un fichier `<svg>` en composant React prêt à copier — avec renommage d'attributs (`className`, `strokeWidth`), nom de composant personnalisable et option TypeScript. Tout le workflow tourne dans le navigateur sur le hub outils SVG, sans compte ni upload serveur. Pour le contexte optimisation, voir aussi l'article SVGO presets expliqués.
Exemple : icône UI dans un design system
Une icône 24×24 exportée depuis Figma peut peser 3–6 Ko en SVG brut. Après optimize default, souvent 1–2 Ko. Le JSX généré reste lisible grâce au <a href="/fr/beautify-svg" class="text-primary hover:underline">beautifier SVG en ligne</a> sur le markup intermédiaire si vous devez auditer les paths.
Avant optimisation
Après optimisation
Chaque composant icône importé est inclus dans le chunk JavaScript de votre app — contrairement à un fichier `.svg` servi en statique. C'est le trade-off habituel React ; le <a href="/fr/minify-js" class="text-primary hover:underline">minificateur JavaScript en ligne</a> illustre la compression côté JS, mais la première ligne de défense reste un SVG source léger avant conversion.
Bonnes pratiques : props, className et accessibilité
Le convertisseur mappe `class` → `className` et les attributs kebab-case SVG vers camelCase React. Pour un theming cohérent, éditez le SVG source ou le JSX pour utiliser `fill="currentColor"` et contrôler la couleur via CSS/Tailwind sur le composant parent.
Une icône seule à côté d'un libellé texte est décorative → `aria-hidden="true"` sur le `<svg>`. Une icône qui porte le sens (ex. statut erreur sans texte) doit garder `<title>` / `<desc>` ou un `aria-label` explicite. FastMinify preserve title/desc dans optimize ; vérifiez qu'ils survivent à la conversion.
Noms de composant invalides (`icon-arrow`) → repli silencieux sur `SvgIcon` (l'outil signale le fallback). XML invalide ou plusieurs racines → erreur de parsing. IDs dupliqués si vous inlinez plusieurs fois le même composant sans sprite.
Quand l'outil navigateur suffit
Pas besoin d'installer SVGR pour convertir une icône reçue par Slack ou un export Figma ponctuel.
Limites : SVGR et plugins bundler
La conversion en ligne est idéale pour explorer et livrer quelques composants. L'import automatique `import Icon from './icon.svg'` à chaque build, le batch sur un dossier `icons/`, et les templates SVGR custom restent du ressort de `@svgr/cli`, `@svgr/webpack` ou `vite-plugin-svgr`.
Validez nom, export et structure JSX dans svg-to-jsx, puis reproduisez les mêmes conventions dans SVGR. Optimisez avec le même preset SVGO qu'en CI — voir l'article <a href="/fr/blog/svgo-presets-optimiser-svg-web" class="text-primary hover:underline">SVGO presets</a> et le <a href="/fr/blog/guide-optimisation-svg-web" class="text-primary hover:underline">guide optimisation SVG</a>.
SVGR et écosystème React
FastMinify svg-to-jsx couvre le cas paste → copy JSX avec trois options. L'écosystème npm offre plus de flexibilité pour l'automatisation.
@svgr/cli
Ligne de commande SVGR — référence pour batch et CI.
Avantages :
Inconvénients :
vite-plugin-svgr / @svgr/webpack
Import SVG comme composant React à la compilation.
Avantages :
Inconvénients :
FastMinify optimize-svg + svg-to-jsx
Chaîne navigateur optimize → convert, sans install.
Avantages :
Inconvénients :
Inline SVG, `<img>` ou composant React ?
Le choix impacte le styling, l'accessibilité et la taille du bundle JavaScript. Un composant React convient aux icônes réutilisées dans un design system ; l'inline ponctuel ou `<img src="icon.svg">` reste valide pour des cas simples.
Icônes UI (boutons, navigation), logos thémables (`fill="currentColor"`), ou assets partagés entre plusieurs apps React/Next.js. Le composant encapsule le markup et évite de dupliquer 200 lignes de `<path>` dans chaque page.
svg-to-jsx produit du JSX à partir du markup existant. Il ne résout pas les imports `@use` Sass, les partials multi-fichiers, ni la génération automatique à chaque commit — pour ça, SVGR en CI reste pertinent. L'outil en ligne excelle pour prototyper, corriger un export, ou onboarder un designer.
Workflow FastMinify : optimize puis svg-to-jsx
Un export Illustrator ou Figma contient souvent des métadonnées et une précision excessive. Passez d'abord par l'optimiseur SVGO en ligne (preset safe ou default pour les icônes UI), ou le minificateur SVG pour un nettoyage whitespace-only. Vous réduisez la taille du composant final sans toucher au workflow React.
Collez le SVG optimisé dans l'outil SVG vers JSX. Choisissez le nom du composant (doit commencer par une majuscule — sinon repli sur `SvgIcon`), export default ou nommé, et TypeScript si votre codebase est en `.tsx`.
Après copie, enveloppez si besoin : fusionnez `props` sur le `<svg>` (`{...props}`), ajoutez `aria-hidden` pour les icônes décoratives, ou `role="img"` + `aria-label` pour les informatives. Validez avec validate SVG en ligne sur le markup source avant conversion.
Conclusion
Le chemin le plus sûr vers un composant React maintenable : optimiser le SVG source, convertir en JSX avec des options explicites, puis ajuster props et accessibilité dans votre design system. FastMinify enchaîne optimize-svg et svg-to-jsx entièrement dans le navigateur — idéal pour prototyper avant de figer SVGR en CI.
Articles connexes

Safe, default ou aggressive ? Choisissez le bon preset SVGO et optimisez vos SVG pour la prod.

Vérifiez la structure de vos `compose.yml` et `.env` avant de lancer `docker compose up` — sans installer d'outils.

Détectez les anti-patterns Docker (root user, cache layers, tags `latest`) et formatez vos Dockerfiles avant la CI.