R初めてのReact

Day 2state と イベント — 動くUIの心臓部

再レンダリングの直感 — stateと画面が同期する感覚

stateが変わると、その部品が再実行されて画面が更新される流れを直感でつかむ。stateを直接書き換えず必ずsetterを使う理由も押さえる。

再レンダリング=「state更新 → 部品を作り直す」

Reactの心臓部を一言でいうと「stateが変わったら、その部品(コンポーネント)をもう一度実行して画面を作り直す」です。この作り直しを再レンダリング(再描画)と呼びます。コンポーネントは関数なので、stateが変わるたびにその関数がもう一度呼ばれ、新しいstateを使って新しい見た目を返す、という流れになります。

なぜ「自動で作り直す」がうれしいのか

昔ながらのやり方だと、値が変わるたびに「どのHTML要素を、どう書き換えるか」を自分で指示する必要がありました。Reactでは「今のstateならこう表示する」というルールだけ書けば、あとはstateが変わるたびにReactが差分を計算して画面を更新してくれます。私たちは『状態と見た目の対応』だけを考えればよく、更新の手作業から解放されます。

流れを追ってみる:カウンターの例

ボタンを押すとsetCountが呼ばれ、countが変わります。するとReactがこのコンポーネント関数をもう一度実行し、新しいcountを使って画面を作り直します。だから表示の数字が増える。「setter → state更新 → 再実行 → 画面更新」という一本道を覚えると、動きが読めるようになります。

TSX
function Counter() {
  const [count, setCount] = useState(0);
  // ↓ ここは count が変わるたびに毎回実行される
  return (
    <div>
      <p>今の値: {count}</p>
      <button onClick={() => setCount(count + 1)}>+1</button>
    </div>
  );
}
カウンター:ボタンを押すたびに再レンダリングされて表示が増える

トグルの例:true と false を切り替える

「開いている / 閉じている」のような2状態の切り替え(トグル)も同じ理屈です。booleanのstateを反転させると再レンダリングが起き、表示が切り替わります。stateと画面がぴったり同期している感覚をつかんでください。

TSX
function Toggle() {
  const [open, setOpen] = useState(false);
  return (
    <div>
      <button onClick={() => setOpen(!open)}>
        {open ? "閉じる" : "開く"}
      </button>
      {open && <p>中身が見えています</p>}
    </div>
  );
}
トグル:stateを反転させると表示が切り替わる

stateを直接書き換えない — 必ずsetterを使う

count = count + 1 や、配列・オブジェクトのstateを list.push(...) のように直接いじるのはNGです。直接書き換えるとReactは「変わった」ことに気づけず再レンダリングが起きません。表示が古いまま固まったり、更新のタイミングがおかしくなったりします。値を変えたいときは必ずsetCountやsetOpenなどのsetterを通します。

直接書き換え:再レンダリングされない

count++ ではReactが気づかず表示が固まる

TSX
<button onClick={() => count++}>+1</button>

setterで更新:再レンダリングされる

setCountを通せば画面も更新される

TSX
<button onClick={() => setCount(count + 1)}>+1</button>

AIにはこう聞く

「このボタンを押しても画面が更新されないのはなぜ? stateを直接書き換えていないか確認して」と聞くと、setterを使っていない・直接書き換えているといった原因を指摘してくれます。「再レンダリングが起きる条件を教えて」と聞くのも理解が深まります。

  • 再レンダリング=stateが変わると、その部品が再実行され画面が更新される
  • 流れは「setter → state更新 → 再実行 → 画面更新」の一本道
  • 私たちは『今のstateならこう表示』だけを書けばよい
  • stateを直接書き換えると再レンダリングされない。必ずsetterを使う

読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。

理解度チェック

答えられれば、面接で説明できる状態に一歩近づきます。

Q1

Reactで「再レンダリング」が起きるのはどんなとき?

Q2

ボタンを押しても画面の数字が増えない。もっとも疑うべき原因はどれ?

Q3

「stateが変わると画面が更新される」という再レンダリングの流れを、初学者に説明するつもりで書いてください。

記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。