コース一覧
React設計:useEffectとコンポーネント分割
依存配列

React設計:useEffectとコンポーネント分割

副作用、useEffect、依存配列、クリーンアップ、stateの持ち上げ、propsの受け渡し、1コンポーネント1責務、部品ツリーとフォルダ構成を扱う全19レッスンの設計コースです。JavaScript版プロフィールサイトを、状態と責務が整理されたReactアプリとして完成させます。

1
useEffectのきほん
01. 副作用とは10分
02. useEffect15分
03. 依存配列15分
04. タイトル連動15分
05. 時計とクリーンアップ15分
06. つくる - ヘッダー時計20分
07. 第7章クイズ15分
2
コンポーネント分割の設計
01. 部品ツリーで考える10分
02. stateを持ち上げる15分
03. propsのバケツリレー15分
04. 1部品1責務15分
05. フォルダ構成10分
06. つくる - ツリー整理20分
07. 第8章クイズ15分
3
総合制作
01. 全セクションReact化20分
02. メモウィジェットReact版20分
03. 命令的vs宣言的10分
04. 自由拡張20分
05. 完成と次のステップ10分

依存配列

依存配列の中の値

依存配列は「いつ走るか」の設定

useEffect の2つめの引数を依存配列と呼びます。ここに何を書くかで、effect が走るタイミングが変わります。書き方は3通りあります。

JavaScript (JSX)

useEffect(() => { ... }); // レンダーのたびに毎回 useEffect(() => { ... }, []); // 最初の1回だけ useEffect(() => { ... }, [likes]); // 最初の1回と、likes が変わったとき

それぞれの意味

書かない場合 は、画面が描き直されるたびに毎回走ります。中で state を更新すると、更新でまた描き直しが起きて、また effect が走って、と止まらなくなります。無限ループの典型なので、まず使いません。

空配列 [] は「何にも依存しない」です。マウント時の1回だけ走ります。

[likes] は「likes に依存する」です。マウント時に1回走り、そのあとは likes の値が前回と変わったときだけ走ります。likes が同じままの描き直しでは走りません。

配列には値をいくつでも並べられます。[likes, name] なら、どちらかが変われば走ります。

何を入れるか

判断の基準は単純です。effect の中で使っている値を全部入れる、これだけです。使っているのに入れ忘れると、値が古いまま更新されない不具合になります。入れすぎると必要以上に走ります。

つまずきどころ

「1回だけにしたいから []」と機械的に決めないでください。中で likes を読んでいるのに [] にすると、いつまでも最初の likes を見つづけます。ボタンを押しても表示が変わらない、という形で現れます。

演習

依存配列の違いを、実際に数を数えて確かめます。

ヒント

useEffect は2つ並べて書けます。1つにまとめる必要はありません

依存ありの effect はマウント時にも1回走ります。だから最初の表示は 1 回になります

App.jsx
プレビュー

できているか

  • 空配列の effect が走って表示が変わっている
  • 依存ありの effect がマウント時に1回走っている
  • いいねを押すと依存ありの effect がもう1回走る
エディタを読み込んでいます