React による HTML レンダリング
React の主な目的は、Web ページ上に HTML をレンダリング(描画)することにあります。
React は「コンテナ」と createRoot() と呼ばれる関数を介して、Web ページに HTML を出力します。
1. HTML コンテナ
React は、Web ページ内に HTML をレンダリングするためにコンテナを使用します。
通常、このコンテナは index.html ファイル内にある <div id="root"></div> 要素です。
前の章の手順に従っていれば、プロジェクトのルートディレクトリに index.html ファイルがあるはずです。
1.1 index.html の初期状態
以下は、index.html ファイルのデフォルトの内容です。
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + React</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>index.html の内容をより分かりやすくするために、不要なコードを取り除いてみましょう。
1.2 簡略化した index.html
index.html ファイルは以下のようになります。
<!doctype html>
<html lang="ja">
<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>これで不要なコードが削ぎ落とされ、邪魔な要素なしで React の学習に集中できるようになりました。
2. createRoot 関数
createRoot 関数は src フォルダ内の main.jsx ファイルに記述されています。これは React アプリケーションの「ルートノード(Root Node)」を作成するために使用される組み込み関数です。
2.1 src/main.jsx のデフォルト内容
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.jsx'
createRoot(document.getElementById('root')).render(
<StrictMode>
<App />
</StrictMode>
)createRoot() 関数は、引数として 1 つの HTML 要素を受け取ります。
この関数の目的は、React コンポーネントを表示すべき HTML 要素を定義することです。
createRoot 関数の動作を理解するために、不要なコードを削除して独自の「Hello React!」サンプルを書いてみましょう。
2.2 独自のレンダリング例
src/main.jsx を以下のように書き換えてみます。
import { createRoot } from 'react-dom/client'
createRoot(document.getElementById('root')).render(
<h1>こんにちは React!</h1>
)3. render メソッド
コードの中に render メソッドがあることに気づきましたか?render メソッドは、HTML コンテナの中に何をレンダリングするかを定義します。
その結果が <div id="root"> 要素内に表示されます。
3.1 「root」要素内に段落を表示する
import { createRoot } from 'react-dom/client'
createRoot(document.getElementById('root')).render(
<p>ようこそ!</p>
)注意: 要素の ID は必ずしも "root" である必要はありませんが、これが標準的な慣習(コンベンション)となっています。
4. Show React ツール
W3Schools には独自の「Show React」ツールがあり、チュートリアルで説明するコードの結果を確認できます。
「Run Example」ボタンをクリックして結果を見てみましょう。
4.1 ツールでの実行例
import { createRoot } from 'react-dom/client'
createRoot(document.getElementById('root')).render(
<p>ようこそ!</p>
)5. HTML コード(JSX)
このチュートリアルの HTML コードでは JSX を使用しています。JSX を使うと、JavaScript コードの中に HTML タグを直接記述することができます。
構文に馴染みがなくても心配しないでください。JSX については後ほど詳しく学習します。
5.1 変数に HTML を格納して表示する
HTML コードを含む変数を作成し、それを「root」ノードに表示する例です。
import { createRoot } from 'react-dom/client'
const myelement = (
<table>
<tr>
<th>名前</th>
</tr>
<tr>
<td>ジョン</td>
</tr>
<tr>
<td>エルザ</td>
</tr>
</table>
);
createRoot(document.getElementById('root')).render(
myelement
)6. ルートノードのカスタマイズ
ルートノードとは、結果を表示したい場所となる HTML 要素のことです。
これは React によって管理される、コンテンツのための「コンテナ」のようなものです。
必ずしも <div> 要素である必要はなく、id='root' である必要もありません。
6.1 任意の ID を持つルートノード
ルートノードの名前は自由に決めることができます。
例えば、結果を <header id="sandy"> 要素に表示させる場合は以下のようになります。
index.html
<!doctype html>
<html lang="ja">
<body>
<header id="sandy"></header>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>main.jsx
import { createRoot } from 'react-dom/client'
createRoot(document.getElementById('sandy')).render(
<p>ヘッダーにレンダリングされました!</p>
)