← レベル3 – マスター

レッスン 6/10 ⏱ 90 分 プレミアム

大再構築:React でサイトを作り直す

レベル1のサイトを React で書き直す。同じサイト、3回目——今度はプロみたいに。

ミッション

レベル1–2のサイトを React で再構築。後退に聞こえる? 違う——最高のトレーニング:コンテンツとデザインはもう決まってるから、新しい技術だけに集中できる。終わったら、プロが価値を感じる理由が白黒はっきり。

再構築プラン

  1. サイトをコンポーネントに分割。 紙と鉛筆を取る(マジで!)サイトを箱でスケッチ:Header、Gallery、Quiz、Footer… 各箱 = src/ の1ファイル。

  2. HTML をコンポーネントに移す。 古い .html から JSX に少しずつコピー。馴染みの違いに注意:classclassName、各コンポーネントは1つのラッパー要素。画像を Vite プロジェクトの public/ にコピー——/images/team.jpg みたいなパスはそのまま動く。

  3. CSS を移す。 style.css の中身を src/App.css にコピー。ほぼそのまま動く——CSS は CSS。

  4. データを配列に出す。 カード、結果、ギャラリー写真——繰り返すものは全部オブジェクトの配列 + .map()、コンポーネントレッスンで学んだ通り。

  5. レベル2の呪文を state に書き換え。 変換表:

    レベル2(素の JavaScript)React
    getElementById + textContentstate + JSX の {value}
    addEventListener("click", ...)onClick={...}
    classList.toggle + CSS .hidden真偽値 state + {condition && (...)}
    変数付きカウンター数値の useState

見てみよう:React 流ダークモード

1つの呪文を一緒に書き換えて、変換を見る:

import { useState } from 'react';
import Header from './Header.jsx';
import Gallery from './Gallery.jsx';

function App() {
  const [dark, setDark] = useState(
    localStorage.getItem("mode") === "dark"
  );

  function toggleMode() {
    const newMode = !dark;
    setDark(newMode);
    localStorage.setItem("mode", newMode ? "dark" : "light");
  }

  return (
    <div className={dark ? "dark" : ""}>
      <Header onToggle={toggleMode} dark={dark} />
      <Gallery />
    </div>
  );
}

export default App;

Header.jsx ではボタンが prop で関数を受け取る:

function Header({ onToggle, dark }) {
  return (
    <header>
      <h1>My website</h1>
      <button onClick={onToggle}>{dark ? "☀️" : "🌙"}</button>
    </header>
  );
}

最後の新しいこと:prop は関数も渡せる。 App が state を持ち、子に切り替えボタンを貸す。「state は上に住む」——React で最も一般的なパターン。

再構築チェックリスト

💡

行き詰まりはゲームの一部。 このレッスンはマラソン、スプリントじゃない——何日かに分けてOK。詰まったら:コンソール(F12)、Vite のエラーメッセージ、前レッスンの例と比較。プロもこうデバッグする。

確認: サイトが localhost で動き、(ほぼ)以前と同じ見た目——でも中身はコンポーネント、データ、state。データ配列にカードを1つ足して、どれだけ楽か見て。それ が React が存在する理由全部。

このレッスンのまとめ