Konversi HTML ke JSX adalah proses mengubah markup HTML standar menjadi sintaks JSX yang dapat di-render oleh komponen React. JSX terlihat mirip dengan HTML tetapi mengikuti konvensi dan aturan penamaan JavaScript. Atribut seperti class menjadi className, for menjadi htmlFor, dan string style inline digantikan dengan objek JavaScript. Perubahan ini diperlukan karena JSX dikompilasi menjadi panggilan React.createElement(), di mana nama atribut harus sesuai dengan nama properti DOM API, bukan nama atribut HTML.
Pemetaan antara atribut HTML dan prop JSX didefinisikan oleh dokumentasi elemen DOM React. React menggunakan camelCase untuk atribut multi-kata (tabindex menjadi tabIndex, maxlength menjadi maxLength) karena identifier JavaScript tidak dapat mengandung tanda hubung. Tag self-closing seperti <img>, <br>, dan <input> harus menyertakan garis miring penutup di JSX (<img />) karena JSX mengikuti aturan XML di mana setiap tag harus ditutup secara eksplisit.
htmlToJsxContent.whatBody3
Mengapa Menggunakan Konverter HTML ke JSX?
Mengganti nama atribut dan menulis ulang string style secara manual di puluhan elemen HTML itu lambat dan rawan kesalahan. Sebuah konverter menangani semua transformasi sekaligus, sehingga Anda dapat menempelkan HTML dari sumber mana pun dan mendapatkan JSX yang valid dalam hitungan detik.
⚡
Konversi instan
Tempel cuplikan HTML apa pun dan dapatkan output JSX secara langsung. Konverter menangani class, for, style, event handler, atribut boolean, dan self-closing tag dalam satu kali proses.
🔒
Pemrosesan mengutamakan privasi
Semua konversi berjalan secara lokal di browser Anda. HTML Anda tidak pernah meninggalkan halaman, sehingga Anda dapat dengan aman mengonversi markup yang berisi kode internal, endpoint API, atau konten sensitif.
📋
Tanpa akun atau pengaturan
Buka halaman dan mulai mengonversi. Tidak perlu login, tidak ada paket npm yang perlu diinstal, tidak ada langkah build yang perlu dikonfigurasi. Berfungsi di perangkat apa pun dengan browser modern.
🔧
Cakupan atribut lengkap
Mengonversi semua pemetaan atribut HTML ke JSX standar termasuk className, htmlFor, tabIndex, readOnly, autoComplete, dan 20+ lainnya. Juga menangani penggantian nama event handler dari onclick ke onClick.
Kasus Penggunaan HTML ke JSX
Developer frontend: migrasi template
Saat memindahkan halaman HTML atau komponen yang sudah ada ke proyek React, tempelkan markup ke konverter alih-alih mencari atribut class dan for secara manual di ratusan baris kode.
Engineer backend: menyematkan email HTML
Template email ditulis dalam HTML biasa. Saat merendernya di dalam dashboard admin React atau komponen pratinjau, konversi HTML ke JSX yang valid untuk menghindari error sintaks className dan style.
DevOps: mengonversi widget dashboard
Dashboard monitoring sering menggunakan cuplikan HTML untuk widget kustom. Konversi ini ke JSX saat mengintegrasikannya ke platform internal tools berbasis React seperti Retool atau panel admin kustom.
QA engineer: mereproduksi laporan bug
Ketika laporan bug menyertakan output HTML mentah, konversi ke JSX untuk merender dengan cepat di dalam test harness React atau cerita Storybook untuk inspeksi visual dan debugging.
Designer: pembuatan prototipe dari mockup HTML
Alat desain seperti Figma mengekspor HTML/CSS. Konversi markup yang diekspor ke JSX untuk langsung memasukkannya ke dalam prototipe React tanpa pembersihan atribut manual.
Mahasiswa: mempelajari sintaks React
Bandingkan input HTML dengan output JSX berdampingan untuk memahami atribut mana yang berubah dan mengapa. Melihat transformasi membuat konvensi penamaan React lebih mudah diingat dibandingkan membaca dokumentasi saja.
Referensi Pemetaan Atribut HTML ke JSX
Tabel di bawah ini mencantumkan atribut HTML yang berubah saat dikonversi ke JSX. Atribut yang tidak tercantum di sini (id, src, href, alt, placeholder, dll.) tetap tidak berubah karena nama HTML-nya sudah sesuai dengan nama properti DOM API yang bersangkutan.
Atribut HTML
Prop JSX
Catatan
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
Konversi Style Inline: HTML vs JSX
Style inline adalah bagian konversi HTML ke JSX yang paling rawan kesalahan karena baik format nilai maupun nama properti berubah:
Atribut style HTML
Sebuah string deklarasi CSS yang dipisahkan oleh titik koma. Nama properti menggunakan kebab-case (background-color, font-size, border-radius). Nilai selalu berupa string, termasuk nilai numerik dengan satuan.
Sebuah objek JavaScript dengan nama properti camelCase (backgroundColor, fontSize, borderRadius). Nilai string dikutip. Nilai numerik tanpa satuan (lineHeight, opacity, zIndex, flexGrow) dapat berupa angka biasa.
Contoh-contoh ini menunjukkan cara mengonversi HTML ke JSX secara terprogram dalam berbagai bahasa dan lingkungan. Masing-masing mencakup penggantian nama atribut, konversi style, dan penanganan self-closing tag.
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>
}
Pertanyaan yang Sering Diajukan
Apa perbedaan antara HTML dan JSX?
JSX adalah ekstensi sintaks untuk JavaScript yang digunakan oleh React. Terlihat seperti HTML tetapi dikompilasi menjadi panggilan React.createElement(). Perbedaan utamanya adalah: class menjadi className, for menjadi htmlFor, style inline menggunakan objek JavaScript alih-alih string CSS, dan semua tag harus ditutup secara eksplisit (termasuk elemen void seperti <img />). JSX juga memungkinkan penyematan ekspresi JavaScript di dalam kurung kurawal.
Mengapa React menggunakan className alih-alih class?
Kata 'class' adalah kata kunci yang dipesan dalam JavaScript. Karena JSX dikompilasi menjadi panggilan fungsi JavaScript, menggunakan 'class' sebagai nama prop akan menyebabkan error sintaks. React memilih 'className' karena sesuai dengan nama properti DOM API (element.className) yang sudah digunakan JavaScript untuk membaca dan mengatur kelas CSS pada elemen DOM.
Apakah saya perlu mengonversi HTML ke JSX secara manual?
Tidak. Anda dapat menggunakan konverter online seperti alat ini, atau mengotomatiskannya dengan library seperti htmltojsx (npm) atau html-react-parser. Untuk migrasi skala besar, alat seperti codemod atau jscodeshift dapat mengubah seluruh codebase. Konversi manual hanya praktis untuk cuplikan kecil beberapa baris.
Bagaimana style inline ditangani di JSX?
Di JSX, atribut style menerima objek JavaScript, bukan string CSS. Nama properti menggunakan camelCase (backgroundColor alih-alih background-color). Nilai berupa string secara default, tetapi properti numerik tertentu seperti lineHeight, opacity, dan zIndex menerima angka biasa tanpa satuan. Kurung kurawal ganda dalam style={{ color: 'red' }} bukan sintaks khusus: kurung kurawal luar adalah ekspresi JSX, dan kurung kurawal dalam adalah literal objek JavaScript.
Bisakah saya menggunakan komentar HTML di JSX?
Tidak. Komentar HTML (<!-- komentar -->) tidak valid di JSX. Gunakan komentar blok JavaScript yang dibungkus dalam kurung kurawal sebagai gantinya: {/* komentar */}. Konverter ini menangani transformasi tersebut secara otomatis. Komentar JSX harus berada di dalam elemen induk, bukan di level teratas pengembalian komponen.
Atribut HTML mana yang tetap sama di JSX?
Sebagian besar atribut HTML mempertahankan nama aslinya di JSX. Contoh umum termasuk id, src, href, alt, type, name, value, placeholder, disabled, hidden, dan semua atribut data-* serta aria-*. Hanya atribut yang nama HTML-nya berbeda dari nama properti DOM API yang perlu diubah: class ke className, for ke htmlFor, dan atribut multi-kata yang beralih dari huruf kecil ke camelCase.
Apakah dangerouslySetInnerHTML sama dengan mengonversi HTML ke JSX?
Tidak. dangerouslySetInnerHTML melewati rendering React dan menyuntikkan HTML mentah langsung ke DOM, yang berisiko terhadap kerentanan XSS. Mengonversi HTML ke JSX menghasilkan elemen React aktual yang melewati virtual DOM React dan aman secara default. Gunakan konversi HTML ke JSX untuk markup statis yang Anda kendalikan. Gunakan dangerouslySetInnerHTML hanya ketika Anda harus me-render HTML tepercaya dari sumber eksternal yang tidak dapat dikonversi ke JSX.