技術ブログ改め、Qiitaの下書き

HTMLでは使えないJSX独自の書き方

はじめに

業務でHTML(Javaのjsp)を書いている時、select要素の初期値をReactのJSXの感覚で書いたら動かなかった。HTMLとJSXとでは書き方が違ったのだ。

select要素

ReactのJSXでは、select要素のvalue属性にその値を入れることでの初期値を決めることができる。

JavaScript with JSX
const Component = () =>
  <select value="bar">
    <option value="foo">FOO</option>
    <option value="bar">BAR</option>
  </select>

一方HTMLでは、初期値にするoption要素へselected属性を指定する必要がある。

HTML
<select>
  <option value="foo">FOO</option>
  <option value="bar" selected>BAR</option>
</select>

閉じタグ

JSXでは閉じタグは省略できないが、HTMLでは、省略できる要素がある。

HTML
<ul>
  <!-- JSXでは文法エラー -->
  <li><p>foo
  <li><p>bar
<ul>

一方で空要素は、JSXでは全てのタグで<div />と終了タグを省略できるが、HTMLでは<img />のような必ず空要素のタグでしか省略することができない。

HTML
<body>
  <!-- HTMLでは正しくパースされない -->
  <div id="app" />
  <script src="/bundle.js" />
</body>