HTML-zu-JSX-Konvertierung ist der Prozess, Standard-HTML-Markup in JSX-Syntax umzuwandeln, die React-Komponenten rendern können. JSX sieht ähnlich wie HTML aus, folgt jedoch den Namenskonventionen und Regeln von JavaScript. Attribute wie class werden zu className, for wird zu htmlFor, und Inline-Style-Strings werden durch JavaScript-Objekte ersetzt. Diese Änderungen sind erforderlich, weil JSX zu React.createElement()-Aufrufen kompiliert wird, bei denen die Attributnamen den DOM-API-Eigenschaftsnamen entsprechen müssen — nicht den HTML-Attributnamen.
Die Zuordnung zwischen HTML-Attributen und JSX-Props ist in Reacts Dokumentation zu DOM-Elementen festgelegt. React verwendet camelCase für mehrgliedrige Attribute (tabindex wird zu tabIndex, maxlength zu maxLength), weil JavaScript-Bezeichner keine Bindestriche enthalten dürfen. Selbstschließende Tags wie <img>, <br> und <input> müssen in JSX einen abschließenden Schrägstrich enthalten (<img />), da JSX XML-Regeln folgt, bei denen jedes Tag explizit geschlossen werden muss.
htmlToJsxContent.whatBody3
Warum einen HTML-zu-JSX-Converter verwenden?
Das manuelle Umbenennen von Attributen und Umschreiben von Style-Strings über Dutzende von HTML-Elementen ist zeitaufwendig und fehleranfällig. Ein Converter erledigt alle Umwandlungen auf einmal — HTML aus beliebiger Quelle einfügen und in Sekunden gültiges JSX erhalten.
⚡
Sofortige Konvertierung
Beliebiges HTML-Snippet einfügen und sofort JSX-Ausgabe erhalten. Der Converter behandelt class, for, style, Event-Handler, boolesche Attribute und selbstschließende Tags in einem einzigen Durchlauf.
🔒
Datenschutz an erster Stelle
Die gesamte Konvertierung läuft lokal im Browser. Das HTML verlässt niemals die Seite — damit können auch Markup mit internem Code, API-Endpunkten oder sensiblen Inhalten sicher konvertiert werden.
📋
Kein Konto, kein Setup
Seite öffnen und direkt konvertieren. Kein Login erforderlich, keine npm-Pakete zu installieren, kein Build-Schritt zu konfigurieren. Funktioniert auf jedem Gerät mit einem modernen Browser.
🔧
Vollständige Attributabdeckung
Konvertiert alle Standard-HTML-zu-JSX-Attributzuordnungen, darunter className, htmlFor, tabIndex, readOnly, autoComplete und über 20 weitere. Verarbeitet auch die Umbenennung von Event-Handlern wie onclick zu onClick.
Anwendungsfälle für HTML to JSX
Frontend-Entwickler: Templates migrieren
Beim Überführen einer bestehenden HTML-Seite oder -Komponente in ein React-Projekt das Markup in den Converter einfügen, anstatt manuell nach class- und for-Attributen über Hunderte von Zeilen zu suchen.
Backend-Entwickler: HTML-E-Mails einbetten
E-Mail-Templates werden in einfachem HTML erstellt. Beim Rendern innerhalb eines React-Admin-Dashboards oder einer Vorschaukomponente das HTML in gültiges JSX konvertieren, um className- und Style-Syntaxfehler zu vermeiden.
DevOps: Dashboard-Widgets konvertieren
Monitoring-Dashboards verwenden häufig HTML-Snippets für benutzerdefinierte Widgets. Diese in JSX umwandeln, wenn sie in eine React-basierte interne Tools-Plattform wie Retool oder ein eigenes Admin-Panel integriert werden.
QA-Ingenieur: Bug-Reports reproduzieren
Wenn ein Bug-Report rohes HTML enthält, dieses in JSX konvertieren, um es schnell in einem React-Test-Harness oder einer Storybook-Story für die visuelle Inspektion und Fehlersuche zu rendern.
Designer: Prototypen aus HTML-Mockups
Design-Tools wie Figma exportieren HTML/CSS. Das exportierte Markup in JSX konvertieren, um es direkt in einen React-Prototyp einzufügen — ohne manuelle Attributbereinigung.
Lernende: React-Syntax verstehen
HTML-Eingabe und JSX-Ausgabe nebeneinander vergleichen, um zu verstehen, welche Attribute sich ändern und warum. Das Sehen der Transformation macht die React-Namenskonventionen leichter einprägsam als das Lesen der Dokumentation allein.
HTML-zu-JSX-Attributzuordnung — Referenz
Die folgende Tabelle listet die HTML-Attribute auf, die bei der Konvertierung zu JSX geändert werden. Nicht aufgeführte Attribute (id, src, href, alt, placeholder usw.) bleiben unverändert, da ihre HTML-Namen bereits den entsprechenden DOM-API-Eigenschaftsnamen entsprechen.
HTML-Attribut
JSX-Prop
Hinweise
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
Inline-Style-Konvertierung: HTML vs. JSX
Inline-Styles sind der fehleranfälligste Teil der HTML-zu-JSX-Konvertierung, da sich sowohl das Werteformat als auch die Eigenschaftsnamen ändern:
HTML-Style-Attribut
Eine durch Semikolons getrennte Zeichenkette aus CSS-Deklarationen. Eigenschaftsnamen verwenden Kebab-Case (background-color, font-size, border-radius). Werte sind immer Zeichenketten, einschließlich numerischer Werte mit Einheiten.
Ein JavaScript-Objekt mit camelCase-Eigenschaftsnamen (backgroundColor, fontSize, borderRadius). Zeichenkettenwerte werden in Anführungszeichen gesetzt. Einheitenlose numerische Werte (lineHeight, opacity, zIndex, flexGrow) können einfache Zahlen sein.
Diese Beispiele zeigen, wie HTML programmatisch in verschiedenen Sprachen und Umgebungen in JSX konvertiert werden kann. Jedes Beispiel behandelt Attributumbenennung, Style-Konvertierung und das Schließen von void-Elementen.
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>
}
Häufig gestellte Fragen
Was ist der Unterschied zwischen HTML und JSX?
JSX ist eine Syntaxerweiterung für JavaScript, die von React verwendet wird. Es sieht wie HTML aus, kompiliert aber zu React.createElement()-Aufrufen. Die wichtigsten Unterschiede: class wird zu className, for wird zu htmlFor, Inline-Styles verwenden JavaScript-Objekte statt CSS-Strings, und alle Tags müssen explizit geschlossen werden (einschließlich void-Elementen wie <img />). JSX erlaubt außerdem das Einbetten von JavaScript-Ausdrücken in geschweiften Klammern.
Warum verwendet React className statt class?
Das Wort 'class' ist ein reserviertes Schlüsselwort in JavaScript. Da JSX zu JavaScript-Funktionsaufrufen kompiliert, würde die Verwendung von 'class' als Prop-Name einen Syntaxfehler verursachen. React wählte 'className', weil es dem DOM-API-Eigenschaftsnamen (element.className) entspricht, den JavaScript bereits zum Lesen und Setzen von CSS-Klassen auf DOM-Elementen verwendet.
Muss ich HTML manuell in JSX konvertieren?
Nein. Ein Online-Converter wie dieses Tool kann verwendet werden, oder die Konvertierung kann mit Bibliotheken wie htmltojsx (npm) oder html-react-parser automatisiert werden. Für umfangreiche Migrationen können Tools wie codemod oder jscodeshift ganze Codebasen transformieren. Manuelle Konvertierung ist nur für kleine Snippets von wenigen Zeilen praktikabel.
Wie werden Inline-Styles in JSX behandelt?
In JSX akzeptiert das style-Attribut ein JavaScript-Objekt, keinen CSS-String. Eigenschaftsnamen verwenden camelCase (backgroundColor statt background-color). Werte sind standardmäßig Zeichenketten, aber bestimmte numerische Eigenschaften wie lineHeight, opacity und zIndex akzeptieren einfache Zahlen ohne Einheiten. Die doppelten geschweiften Klammern in style={{ color: 'red' }} sind keine spezielle Syntax: Die äußeren Klammern sind ein JSX-Ausdruck, die inneren Klammern ein JavaScript-Objekt-Literal.
Kann ich HTML-Kommentare in JSX verwenden?
Nein. HTML-Kommentare (<!-- Kommentar -->) sind in JSX nicht gültig. Stattdessen JavaScript-Block-Kommentare in geschweiften Klammern verwenden: {/* Kommentar */}. Dieser Converter erledigt die Umwandlung automatisch. JSX-Kommentare müssen sich innerhalb eines Elternelements befinden, nicht auf der obersten Ebene eines Component-Returns.
Welche HTML-Attribute bleiben in JSX gleich?
Die meisten HTML-Attribute behalten in JSX ihre ursprünglichen Namen. Gängige Beispiele sind id, src, href, alt, type, name, value, placeholder, disabled, hidden sowie alle data-*- und aria-*-Attribute. Nur Attribute, deren HTML-Name vom DOM-API-Eigenschaftsnamen abweicht, müssen geändert werden: class zu className, for zu htmlFor sowie mehrgliedrige Attribute, die von Kleinbuchstaben zu camelCase wechseln.
Ist dangerouslySetInnerHTML dasselbe wie HTML in JSX konvertieren?
Nein. dangerouslySetInnerHTML umgeht Reacts Rendering und fügt rohes HTML direkt in das DOM ein, was XSS-Sicherheitslücken riskiert. Die Konvertierung von HTML zu JSX erzeugt hingegen echte React-Elemente, die Reacts virtuelles DOM durchlaufen und standardmäßig sicher sind. HTML-zu-JSX-Konvertierung für statisches Markup verwenden, das man selbst kontrolliert. dangerouslySetInnerHTML nur einsetzen, wenn vertrauenswürdiges HTML aus einer externen Quelle gerendert werden muss, das nicht in JSX konvertiert werden kann.