依存配列 (dependency array)
別名: 依存配列 / dependency array / deps
useEffect / useMemo / useCallback の第 2 引数に渡す配列。React はこの値を前回と比較し、変化したときだけ Effect の再実行やメモ化のやり直しを行う。
#react#hooks#useeffect#dependency-array#memoization
定義
依存配列(dependency array) は、useEffect / useMemo / useCallback の第 2 引数に渡す値の配列。
React は描画ごとに配列の各要素を前回と Object.is で比較し、ひとつでも変化したときだけ Effect の再実行やメモ化の再計算を行う。
詳細
[] を渡すとマウント時に 1 回だけ、配列自体を省略すると毎描画で実行される。
比較は参照同値なので、オブジェクト・配列・関数リテラルを直接入れると毎回「変化した」と判定され、再実行が連鎖する。
プリミティブ(id・文字列・数値)へ分解する、useMemo / useCallback で参照を固定する、関数型 setState で state を依存から外す、が定石。
よくある誤解
- 要素は多いほど安全: 逆。
不要な参照を入れると無限ループの温床になる。
必要十分な値だけにする。 - 空にすれば常に安全: 必要な値を外すと古い値を掴む(stale)バグになる。
関連
依存設計のミスは useEffect で無限ループ や Maximum update depth exceeded として現れる。