Wat is HTML naar JSX-conversie?
HTML naar JSX-conversie is het proces waarbij standaard HTML-markup wordt omgezet naar JSX-syntaxis die React-componenten kunnen renderen. JSX lijkt op HTML maar volgt JavaScript-naamgevingsconventies en -regels. Attributen zoals class worden className, for wordt htmlFor, en inline stijlstrings worden vervangen door JavaScript-objecten. Deze wijzigingen zijn vereist omdat JSX compileert naar React.createElement()-aanroepen, waarbij attribuutnamen overeen moeten komen met de DOM API-eigenschapsnamen in plaats van HTML-attribuutnamen.
De koppeling tussen HTML-attributen en JSX-props is vastgelegd in de DOM-elementendocumentatie van React. React gebruikt camelCase voor samengestelde attributen (tabindex wordt tabIndex, maxlength wordt maxLength) omdat JavaScript-identifiers geen koppeltekens mogen bevatten. Zelfsluitende tags zoals <img>, <br> en <input> moeten een afsluitende slash bevatten in JSX (<img />) omdat JSX XML-regels volgt waarbij elke tag expliciet gesloten moet zijn.
htmlToJsxContent.whatBody3
Waarom een HTML naar JSX Converter gebruiken?
Handmatig attributen hernoemen en stijlstrings herschrijven over tientallen HTML-elementen is traag en foutgevoelig. Een converter verwerkt alle transformaties tegelijk: plak HTML uit welke bron dan ook en ontvang geldige JSX in seconden.
Toepassingen van HTML naar JSX
HTML naar JSX Attribuutkoppeling Naslagwerk
De onderstaande tabel geeft een overzicht van de HTML-attributen die veranderen bij conversie naar JSX. Attributen die hier niet staan (id, src, href, alt, placeholder, etc.) blijven ongewijzigd omdat hun HTML-namen al overeenkomen met de bijbehorende DOM API-eigenschapsnamen.
| HTML-attribuut | JSX-prop | Opmerkingen |
|---|---|---|
| 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 stijlconversie: HTML versus JSX
Inline stijlen zijn het meest foutgevoelige deel van HTML naar JSX-conversie, omdat zowel het waardeformaat als de eigenschapsnamen veranderen:
<div style="background-color: #fff; font-size: 14px; margin-top: 10px;">
<div style={{
backgroundColor: '#fff',
fontSize: '14px',
marginTop: 10
}}>Codevoorbeelden
Deze voorbeelden laten zien hoe u HTML naar JSX programmatisch converteert in verschillende talen en omgevingen. Elk voorbeeld behandelt het hernoemen van attributen, stijlconversie en de verwerking van zelfsluitende tags.
// 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>'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)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>'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>
}