Strict Mode
別名: React.StrictMode / React Strict Mode
React の開発専用ラッパー。子孫コンポーネントの effect やレンダリングを開発時に二重実行し、副作用の冪等性チェックや非推奨 API の警告を行う。本番ビルドには影響しない。
公開:
定義
Strict Mode は React の開発専用ラッパー <React.StrictMode> で、子孫コンポーネントのレンダリング・エフェクト・state 初期化関数を開発時に意図的に 2 回呼ぶ仕組み。
副作用の冪等性チェック、非推奨 API の警告、レガシー Context や findDOMNode の検出を行う。
本番ビルドでは何もせず、パフォーマンスへの影響もない。
詳細
React 18 から strict mode の挙動が拡張され、useEffect がマウント直後に「マウント → アンマウント → 再マウント」と二重実行されるようになった。
これは将来の Activity(旧 Offscreen)API に備えて、エフェクトが安全に再実行できるか早期に検出するための仕組み。Next.js App Router では reactStrictMode が既定で true。<React.StrictMode> で囲む範囲はアプリ全体でも、特定のサブツリーだけでも構わない。
よくある誤解
「Strict Mode を切れば直る」のは大抵バグの隠蔽で、依存配列の漏れや cleanup 不在といった根本原因が残ったまま。
本番でも effect が意図せず再実行される場面はあるため、冪等に書くのが正解。
Strict Mode の二重実行は「無限ループ」ではなく、開発時のマウント直後 1 回限定の挙動。
関連
useEffect の cleanup 漏れ や useEffect の無限ループ の切り分けで「Strict Mode 由来か実際のバグか」の判別に必須の概念。