UTILS.
100 % dans le navigateur

HTML vers JSX / React

Convertissez un extrait HTML en JSX valide pour React — en renommant les attributs, en auto-fermant les balises vides et en transformant les styles en ligne en objets de style.

— la sortie apparaît ici —

À propos de cet outil

Le convertisseur HTML vers JSX / React analyse un extrait HTML avec le DOMParser natif du navigateur et le re-sérialise en JSX valide, en corrigeant tout ce dont React a besoin. Il s'exécute entièrement côté client, de sorte que le balisage que vous collez reste sur votre machine. Collez n'importe quel HTML — un export de design, un modèle d'e-mail, une esquisse de composant — et obtenez du JSX que vous pouvez déposer directement dans un fichier React.

La réécriture renomme les attributs réservés (class devient className, for devient htmlFor), met le reste en camelCase — tabindex vers tabIndex, maxlength vers maxLength, stroke-width vers strokeWidth — tout en laissant les attributs data-* et aria-* intacts. Les éléments vides comme img, br, input et hr sont auto-fermés (<img />), les commentaires HTML deviennent {/* ... */}, les accolades littérales dans le texte sont échappées en {'{'}, et une chaîne style="a:b;c:d" en ligne est convertie en objet style={{ a: 'b', c: 'd' }} avec des clés CSS en camelCase. Les attributs booléens comme disabled peuvent être émis nus ou en ={true} avec une bascule.

Choisissez la sortie fragment — les nœuds racines multiples sont automatiquement enveloppés dans un fragment <>...</> — ou la sortie composant complet, qui enveloppe le JSX dans une export default function avec le nom et l'indentation de votre choix (2 espaces, 4 espaces ou tabulations). Le résultat est prêt à coller ; comme l'analyse utilise un vrai DOM, l'imbrication malformée est normalisée de la même manière qu'un navigateur le ferait.

Foire aux questions

Quels attributs sont renommés ?
class devient className et for devient htmlFor ; les autres attributs à trait d'union ou réservés sont mis en camelCase (tabindex vers tabIndex, maxlength vers maxLength, stroke-width vers strokeWidth). Les attributs data-* et aria-* sont préservés exactement tels quels.
Comment les styles en ligne sont-ils gérés ?
Une chaîne style="color:red;font-size:14px" devient style={{ color: 'red', fontSize: '14px' }} — chaque propriété CSS est mise en camelCase et chaque valeur est émise en chaîne, ce qui est toujours valide pour les styles en ligne React.
Que se passe-t-il avec plusieurs éléments racines ?
JSX a besoin d'une racine unique, donc quand votre extrait a plusieurs nœuds de premier niveau, ils sont enveloppés dans un Fragment (<>...</>). Le mode composant complet les enveloppe plutôt dans une expression parenthésée retournée.
Convertit-il les commentaires et les balises vides ?
Oui. Les commentaires HTML deviennent des commentaires JSX {/* ... */}, et les éléments vides (img, br, input, hr, meta, link et les autres) sont rendus auto-fermés en <img />, ce que JSX exige.

Plus d'outils