本文へスキップ
BecomeCoder

Reactコース · 第4章 useEffectとこれから · レッスン11

useEffectで副作用を書く

ブラウザで完結

導入

タイマーを動かす、外部からデータを取ってくる、タイトルを書き換える ―― こうした「描画そのもの以外の処理」を 副作用 と呼び、useEffect に書きます。

説明

1秒ごとに数える簡単なタイマーです。

function App() {
  const [seconds, setSeconds] = React.useState(0);

  React.useEffect(() => {
    const timer = setInterval(() => {
      setSeconds((s) => s + 1);
    }, 1000);
    // 後片付け(コンポーネントが消えるときにタイマーを止める)
    return () => clearInterval(timer);
  }, []); // [] は「最初の1回だけ実行」の意味

  return <h1>経過: {seconds} 秒</h1>;
}
  • useEffect(() => { ... }, []) … 第2引数の依存配列[] なので、最初の描画後に1回だけ実行されます。
  • return () => {...} … effect の「後片付け」。ここでタイマーを止めないと、裏で動き続けてしまいます。
  • setSeconds((s) => s + 1) … 更新関数には「前の値」を受け取る形も書けます。タイマーのような場面ではこちらが安全です。

依存配列に値を入れると、「その値が変わったときにも」実行されます(例 [count])。

やってみよう

1000(ミリ秒)を 500 に変えると、カウントの速さがどう変わるか確かめてみましょう。

実際に動かしてみよう

下のエディタにReactのコードを書くと、右側のプレビューにその場で描画されます。`function App() { ... }` を定義すると自動で表示されます(React・useState などは React.useState の形で使えます)。本文の例を打ち込んだり書き換えたりして、表示の変化を確かめながら進めましょう。

React — ブラウザ内で実行

JSXをその場で変換して描画する学習用React環境(React18 + Babel・同梱)を読み込みます。
スクロールして表示された時点でも自動で読み込まれます。