UTILS.
100% ブラウザ内で完結

HTML から JSX / React へ

HTML スニペットを React 向けの有効な JSX に変換します。属性をリネームし、void タグを自己終了させ、インラインスタイルを style オブジェクトに変換します。

— ここに結果が表示されます —

このツールについて

HTML から JSX / React へのコンバーターは、ブラウザネイティブの DOMParser で HTML スニペットを解析し、React が必要とするすべてを修正して有効な JSX として再シリアライズします。完全にクライアントサイドで実行されるため、貼り付けたマークアップはマシン上に留まります。どんな HTML でも(デザインのエクスポート、メールテンプレート、コンポーネントのスケッチ)貼り付けると、React ファイルに直接入れられる JSX が得られます。

この書き換えは予約属性をリネームし(class は className、for は htmlFor に)、残りを camelCase 化します(tabindex は tabIndex、maxlength は maxLength、stroke-width は strokeWidth)。一方で data-* と aria-* 属性はそのままにします。img, br, input, hr のような void 要素は自己終了になり(<img />)、HTML コメントは {/* ... */} になり、テキスト中のリテラルの波括弧は {'{'} としてエスケープされ、インラインの style="a:b;c:d" 文字列は camelCase 化した CSS キーを持つ style={{ a: 'b', c: 'd' }} オブジェクトに変換されます。disabled のような真偽属性はトグルで、素のまま出力するか ={true} として出力できます。

フラグメント出力(複数のルートノードは自動的に <>...</> フラグメントでラップされます)か、フルコンポーネント出力(選んだ名前とインデント(2 スペース、4 スペース、タブ)で JSX を export default function にラップします)を選べます。結果はそのまま貼り付けられます。解析には実際の DOM を使うため、不正なネストはブラウザと同じ方法で正規化されます。

よくある質問

どの属性がリネームされますか?
class は className に、for は htmlFor になります。その他のハイフン付きや予約された属性は camelCase 化されます(tabindex は tabIndex、maxlength は maxLength、stroke-width は strokeWidth)。data-* と aria-* 属性は書かれたとおり正確に保持されます。
インラインスタイルはどう扱われますか?
style="color:red;font-size:14px" 文字列は style={{ color: 'red', fontSize: '14px' }} になります。各 CSS プロパティは camelCase 化され、すべての値は文字列として出力されるため、React のインラインスタイルとして常に有効です。
複数のルート要素があるとどうなりますか?
JSX は単一のルートを必要とするため、スニペットに複数のトップレベルノードがある場合はフラグメント(<>...</>)でラップされます。フルコンポーネントモードでは代わりに、返される括弧付きの式の内側にラップされます。
コメントや void タグは変換されますか?
はい。HTML コメントは JSX コメント {/* ... */} になり、void 要素(img, br, input, hr, meta, link など)は <img /> のように自己終了でレンダリングされます。これは JSX が必要とするものです。

その他のツール