静的なHTMLでReactを使う|BabelによるJSXのコンパイル

静的なHTMLでReactを使用してみます。

JSXをJavaScriptにコンパイルするBabelをCDNで読み込み、ブラウザが解釈できるJavaScriptにコンパイルすることで、静的なHTMLでもReactを使用できます。

ただしこの方法は実案件では使用しないでください。
コンソールにも「プロダクション環境でご利用の場合は事前にコンパイルしてください」と警告がでます。

ではなぜわざわざやるの?

通常プロジェクトの作成はcreate-react-appで自動で行われますが、何が起きているのかわからないので、今回はBabelによるJSXのコンパイルを見ていきたいと思います。

Web制作をされている方であればjQueryや、jQueryのライブラリを読み込む感覚で使用できるので理解しやすいと思います。

完成形のHTMLファイル

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>BabelによるJSXの変換</title>

</head>

<body>
  <div id="root"></div>

  <script src="https://cdnjs.cloudflare.com/ajax/libs/react/18.2.0/umd/react.development.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.2.0/umd/react-dom.development.min.js"></script>
  <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
  
  <script type="text/babel">
    function App() {
      const comments = ['コメント1', 'コメント2'];
      return (
        <div className="container">
          {comments.map((comment, index) => (
            <ul key="index">
              <li>{comment}</li>
            </ul>
          ))}
        </div>
      )
    }
    ReactDOM.render(<App />, document.getElementById('root'));
  </script>
</body>

</html>

読み込むファイルは3つ

CDNで読み込むファイルは以下です。
ReactとReactDOMは開発版(development)を使用しています。プロダクト版でも使用できます(production)

  1. react.development.min.js
  2. react-dom.development.min.js
  3. babel.min.js

JSX記述時の注意点

JSXは<script></script>タグ内に記述しますが、かならず<script type="text/babel"></script>type="text/babel"と記載してください。type="text/babel"と記載することでBabelが実行されJSXがJavaScriptにコンパイルされます。

試しにReactを使ってみる

解説は以上です。
手っ取り早くReactを使用できる方法ですので、一度試してみたい方にはおすすめです。
CodePenでも手軽に使う方法がありますので、そちらを試したい方は下記の記事を参照してください。

Create React Appで実行していること

今回はJSXの変換部分のみ手動で行いましたが、create-react-appでは他にも様々なことを実行しています。
詳細を知りたい方は下記の書籍をどうぞ

最後に

今回は手っ取り早くReactを試す方法を紹介しました。
Reactのプロジェクト立ち上げは複雑なイメージがありますが、静的なHTMLファイルにCDNで読み込み実行することで少し身近に感じれたのではないでしょうか。

この記事があなたの助けやヒントになっていれば幸いです。
最後までありがとうございました。