ToolDeck

HTML to JSX

HTML für React in JSX konvertieren — class→className, Style-Strings→Objekte

Beispiel ausprobieren

HTML-Eingabe

JSX-Ausgabe

Läuft lokal · Sicher zum Einfügen von Secrets
JSX-Ausgabe erscheint hier…

Was ist HTML-zu-JSX-Konvertierung?

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-AttributJSX-PropHinweise
classclassNameReserved word in JavaScript
forhtmlForReserved word in JavaScript
tabindextabIndexcamelCase convention
readonlyreadOnlycamelCase convention
maxlengthmaxLengthcamelCase convention
minlengthminLengthcamelCase convention
cellpaddingcellPaddingcamelCase convention
cellspacingcellSpacingcamelCase convention
rowspanrowSpancamelCase convention
colspancolSpancamelCase convention
enctypeencTypecamelCase convention
autocompleteautoCompletecamelCase convention
autofocusautoFocuscamelCase convention
autoplayautoPlaycamelCase convention
contenteditablecontentEditablecamelCase convention
crossorigincrossOrigincamelCase convention
novalidatenoValidatecamelCase convention
allowfullscreenallowFullScreencamelCase convention
spellcheckspellCheckcamelCase convention
http-equivhttpEquivHyphen removed, camelCase
onclickonClickEvent handler camelCase
onchangeonChangeEvent handler camelCase
onsubmitonSubmitEvent 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.
<div style="background-color: #fff;
  font-size: 14px;
  margin-top: 10px;">
JSX-Style-Prop
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.
<div style={{
  backgroundColor: '#fff',
  fontSize: '14px',
  marginTop: 10
}}>

Code-Beispiele

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.

JavaScript (DOM API)
// Simple attribute conversion using string replacement
function htmlToJsx(html) {
  return html
    .replace(/\bclass=/g, 'className=')
    .replace(/\bfor=/g, 'htmlFor=')
    .replace(/\btabindex=/g, 'tabIndex=')
    .replace(/<!--([\s\S]*?)-->/g, '{/*$1*/}')
}

htmlToJsx('<div class="box" tabindex="0"><!-- note --></div>')
// → '<div className="box" tabIndex="0">{/* note */}</div>'
JavaScript (html-react-parser)
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.