ToolDeck

HTML to JSX

Konversi HTML ke JSX untuk React — class→className, style string→objek

Coba contoh

Input HTML

Output JSX

Berjalan lokal · Aman untuk menempel rahasia
Output JSX akan muncul di sini…

Apa itu Konversi HTML ke JSX?

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 HTMLProp JSXCatatan
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

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.
<div style="background-color: #fff;
  font-size: 14px;
  margin-top: 10px;">
Prop style JSX
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.
<div style={{
  backgroundColor: '#fff',
  fontSize: '14px',
  marginTop: 10
}}>

Contoh Kode

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.

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>
}

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.