La conversion HTML vers JSX est le processus de transformation du balisage HTML standard en syntaxe JSX que les composants React peuvent restituer. JSX ressemble à HTML mais suit les conventions de nommage et les règles de JavaScript. Les attributs comme class deviennent className, for devient htmlFor, et les chaînes de style en ligne sont remplacées par des objets JavaScript. Ces modifications sont obligatoires car JSX se compile en appels React.createElement(), où les noms d'attributs doivent correspondre aux noms de propriétés de l'API DOM plutôt qu'aux noms d'attributs HTML.
Le mapping entre les attributs HTML et les props JSX est défini par la documentation des éléments DOM de React. React utilise le camelCase pour les attributs composés de plusieurs mots (tabindex devient tabIndex, maxlength devient maxLength) car les identifiants JavaScript ne peuvent pas contenir de tirets. Les balises auto-fermantes comme <img>, <br> et <input> doivent inclure un slash de fermeture en JSX (<img />) car JSX suit les règles XML où chaque balise doit être explicitement fermée.
Au-delà du renommage des attributs, la conversion HTML vers JSX gère également les styles en ligne et les commentaires. Les attributs style HTML utilisent la syntaxe CSS sous forme de chaîne (style="color: red; font-size: 14px"), tandis que JSX attend un objet JavaScript avec des noms de propriétés en camelCase (style={{ color: 'red', fontSize: '14px' }}). Les commentaires HTML (<!-- -->) deviennent des commentaires d'expression JSX ({/* */}). Manquer l'une de ces transformations produit des erreurs à l'exécution ou des bugs de rendu silencieux dans les applications React.
Pourquoi utiliser un convertisseur HTML vers JSX ?
Renommer manuellement les attributs et réécrire les chaînes de style sur des dizaines d'éléments HTML est lent et source d'erreurs. Un convertisseur gère toutes les transformations en une seule passe, vous permettant de coller du HTML depuis n'importe quelle source et d'obtenir du JSX valide en quelques secondes.
⚡
Conversion instantanée
Collez n'importe quel extrait HTML et obtenez immédiatement la sortie JSX. Le convertisseur gère class, for, style, les gestionnaires d'événements, les attributs booléens et les balises auto-fermantes en une seule passe.
🔒
Traitement respectueux de la confidentialité
Toute la conversion s'exécute localement dans votre navigateur. Votre HTML ne quitte jamais la page, vous pouvez donc convertir en toute sécurité du balisage contenant du code interne, des endpoints d'API ou du contenu sensible.
📋
Aucun compte ni installation
Ouvrez la page et commencez à convertir. Aucune connexion requise, aucun package npm à installer, aucune étape de build à configurer. Fonctionne sur n'importe quel appareil avec un navigateur moderne.
🔧
Couverture complète des attributs
Convertit tous les mappings d'attributs HTML vers JSX standard, notamment className, htmlFor, tabIndex, readOnly, autoComplete, et plus de 20 autres. Gère également le renommage des gestionnaires d'événements comme onclick en onClick.
Cas d'utilisation du convertisseur HTML vers JSX
Développeur frontend : migration de templates
Lors du transfert d'une page HTML ou d'un composant existant dans un projet React, collez le balisage dans le convertisseur plutôt que de rechercher manuellement les attributs class et for sur des centaines de lignes.
Développeur backend : intégration d'e-mails HTML
Les templates d'e-mails sont rédigés en HTML brut. Lors de leur affichage dans un tableau de bord admin React ou un composant de prévisualisation, convertissez le HTML en JSX valide pour éviter les erreurs de syntaxe liées à className et style.
DevOps : conversion de widgets de tableau de bord
Les tableaux de bord de supervision utilisent souvent des extraits HTML pour les widgets personnalisés. Convertissez-les en JSX lors de leur intégration dans une plateforme d'outils internes basée sur React comme Retool ou un panneau d'administration sur mesure.
Ingénieur QA : reproduction de rapports de bugs
Lorsqu'un rapport de bug inclut une sortie HTML brute, convertissez-la en JSX pour l'afficher rapidement dans un environnement de test React ou une story Storybook pour inspection visuelle et débogage.
Designer : prototypage depuis des maquettes HTML
Les outils de design comme Figma exportent du HTML/CSS. Convertissez le balisage exporté en JSX pour l'intégrer directement dans un prototype React sans nettoyage manuel des attributs.
Étudiant : apprentissage de la syntaxe React
Comparez l'entrée HTML et la sortie JSX côte à côte pour comprendre quels attributs changent et pourquoi. Voir la transformation rend les conventions de nommage de React plus faciles à mémoriser que la simple lecture de la documentation.
Référence de mapping d'attributs HTML vers JSX
Le tableau ci-dessous liste les attributs HTML qui changent lors de la conversion en JSX. Les attributs non listés ici (id, src, href, alt, placeholder, etc.) restent inchangés car leurs noms HTML correspondent déjà aux noms de propriétés de l'API DOM.
Attribut HTML
Prop JSX
Notes
class
className
Reserved word in JavaScript
for
htmlFor
Reserved word in JavaScript
tabindex
tabIndex
camelCase convention
readonly
readOnly
camelCase convention
maxlength
maxLength
camelCase convention
minlength
minLength
camelCase convention
cellpadding
cellPadding
camelCase convention
cellspacing
cellSpacing
camelCase convention
rowspan
rowSpan
camelCase convention
colspan
colSpan
camelCase convention
enctype
encType
camelCase convention
autocomplete
autoComplete
camelCase convention
autofocus
autoFocus
camelCase convention
autoplay
autoPlay
camelCase convention
contenteditable
contentEditable
camelCase convention
crossorigin
crossOrigin
camelCase convention
novalidate
noValidate
camelCase convention
allowfullscreen
allowFullScreen
camelCase convention
spellcheck
spellCheck
camelCase convention
http-equiv
httpEquiv
Hyphen removed, camelCase
onclick
onClick
Event handler camelCase
onchange
onChange
Event handler camelCase
onsubmit
onSubmit
Event handler camelCase
Conversion des styles en ligne : HTML vs JSX
Les styles en ligne sont la partie la plus délicate de la conversion HTML vers JSX car le format de valeur et les noms de propriétés changent tous les deux :
Attribut style HTML
Une chaîne de déclarations CSS séparées par des points-virgules. Les noms de propriétés utilisent le kebab-case (background-color, font-size, border-radius). Les valeurs sont toujours des chaînes, y compris les valeurs numériques avec unités.
Un objet JavaScript avec des noms de propriétés en camelCase (backgroundColor, fontSize, borderRadius). Les valeurs de type chaîne sont entre guillemets. Les valeurs numériques sans unité (lineHeight, opacity, zIndex, flexGrow) peuvent être des nombres simples.
Ces exemples montrent comment convertir du HTML en JSX par programmation dans différents langages et environnements. Chacun couvre le renommage des attributs, la conversion des styles et la gestion des balises auto-fermantes.
import parse from 'html-react-parser'
// Parse HTML string into React elements (handles all JSX rules)
const element = parse('<div class="card"><img src="photo.jpg" alt="Photo"></div>')
// Returns: React.createElement('div', { className: 'card' },
// React.createElement('img', { src: 'photo.jpg', alt: 'Photo' }))
// With custom element replacement
const options = {
replace(domNode) {
if (domNode.name === 'img') {
return <OptimizedImage src={domNode.attribs.src} alt={domNode.attribs.alt} />
}
}
}
const custom = parse('<img src="photo.jpg" alt="Photo">', options)
Python (BeautifulSoup)
from bs4 import BeautifulSoup
import re
ATTR_MAP = {
'class': 'className', 'for': 'htmlFor',
'tabindex': 'tabIndex', 'readonly': 'readOnly',
'maxlength': 'maxLength', 'autocomplete': 'autoComplete',
}
def html_to_jsx(html: str) -> str:
"""Convert HTML attribute names to JSX equivalents."""
for html_attr, jsx_attr in ATTR_MAP.items():
html = re.sub(rf'\b{html_attr}=', f'{jsx_attr}=', html)
# Convert HTML comments to JSX comments
html = re.sub(r'<!--(.*?)-->', r'{/*\1*/}', html)
return html
print(html_to_jsx('<label for="email" class="field">Email</label>'))
# → '<label htmlFor="email" className="field">Email</label>'
Go
package main
import (
"fmt"
"strings"
)
var attrMap = map[string]string{
"class=": "className=",
"for=": "htmlFor=",
"tabindex=": "tabIndex=",
"readonly": "readOnly",
}
func htmlToJSX(html string) string {
result := html
for old, new := range attrMap {
result = strings.ReplaceAll(result, old, new)
}
// Convert comments
result = strings.ReplaceAll(result, "<!--", "{/*")
result = strings.ReplaceAll(result, "-->", "*/}")
return result
}
func main() {
html := `<div class="wrapper"><input readonly tabindex="1"></div>`
fmt.Println(htmlToJSX(html))
// → <div className="wrapper"><input readOnly tabIndex="1"></div>
}
Questions fréquentes
Quelle est la différence entre HTML et JSX ?
JSX est une extension de syntaxe JavaScript utilisée par React. Il ressemble à du HTML mais se compile en appels React.createElement(). Les principales différences sont : class devient className, for devient htmlFor, les styles en ligne utilisent des objets JavaScript au lieu de chaînes CSS, et toutes les balises doivent être explicitement fermées (y compris les éléments vides comme <img />). JSX permet également d'intégrer des expressions JavaScript entre accolades.
Pourquoi React utilise-t-il className à la place de class ?
Le mot 'class' est un mot-clé réservé en JavaScript. Comme JSX se compile en appels de fonctions JavaScript, utiliser 'class' comme nom de prop provoquerait une erreur de syntaxe. React a choisi 'className' car il correspond au nom de propriété de l'API DOM (element.className) que JavaScript utilise déjà pour lire et définir les classes CSS sur les éléments DOM.
Dois-je convertir manuellement le HTML en JSX ?
Non. Vous pouvez utiliser un convertisseur en ligne comme cet outil, ou l'automatiser avec des bibliothèques comme htmltojsx (npm) ou html-react-parser. Pour les migrations à grande échelle, des outils comme codemod ou jscodeshift peuvent transformer des bases de code entières. La conversion manuelle n'est pratique que pour de petits extraits de quelques lignes.
Comment les styles en ligne sont-ils gérés en JSX ?
En JSX, l'attribut style accepte un objet JavaScript, pas une chaîne CSS. Les noms de propriétés utilisent le camelCase (backgroundColor au lieu de background-color). Les valeurs sont des chaînes par défaut, mais certaines propriétés numériques comme lineHeight, opacity et zIndex acceptent des nombres simples sans unités. Les doubles accolades dans style={{ color: 'red' }} ne sont pas une syntaxe spéciale : les accolades extérieures sont une expression JSX, et les accolades intérieures sont un littéral d'objet JavaScript.
Puis-je utiliser des commentaires HTML en JSX ?
Non. Les commentaires HTML (<!-- commentaire -->) ne sont pas valides en JSX. Utilisez plutôt des commentaires de bloc JavaScript entre accolades : {/* commentaire */}. Ce convertisseur gère la transformation automatiquement. Les commentaires JSX doivent se trouver à l'intérieur d'un élément parent, pas au niveau racine du retour d'un composant.
Quels attributs HTML restent identiques en JSX ?
La plupart des attributs HTML conservent leurs noms d'origine en JSX. Les exemples courants incluent id, src, href, alt, type, name, value, placeholder, disabled, hidden, et tous les attributs data-* et aria-*. Seuls les attributs dont le nom HTML diffère du nom de propriété de l'API DOM doivent changer : class en className, for en htmlFor, et les attributs composés qui passent des minuscules au camelCase.
dangerouslySetInnerHTML est-il identique à la conversion HTML vers JSX ?
Non. dangerouslySetInnerHTML contourne le rendu de React et injecte du HTML brut directement dans le DOM, ce qui présente des risques de XSS. Convertir du HTML en JSX produit de véritables éléments React qui passent par le DOM virtuel de React et sont sécurisés par défaut. Utilisez la conversion HTML vers JSX pour le balisage statique que vous contrôlez. N'utilisez dangerouslySetInnerHTML que lorsque vous devez afficher du HTML fiable provenant d'une source externe qui ne peut pas être converti en JSX.