😸

useEffectのフック関数は初期化時、二回実行された原因は

2024/06/30に公開

React 18が登場された時、「厳格」と「非厳格」という二つのモードは追加されました。

厳格モード(String Mode)は開発環境(development)のみで役に立て、本番環境で役に立てないようにご注意くだい。

開発環境で、厳格モードを使ったら、useEffectのフック関数は二回実行されるようになります。なぜかというと、コンポーネントの即時アンインストールと再マウントを模倣するために二回実行されます。実行順位は次になります。

//コンポーネントのマウント
1.React mounts the component. 
//layoutの実行
2.Layout effects are created. 
 // Effectsの実行
3.Effect effects are created.
//コンポーネントのデストロイのシミュレーション
4.React simulates effects being destroyed on a mounted component. 
// layoutのデストロイ
5.Layout effects are destroyed. 
// Effectsのデストロイ
6.Effects are destroyed. 
// Reactの再マウントのシミュレーション
7.React simulates effects being re-created on a mounted component. 
// layoutの再作成
8.Layout effects are created 
// Effectの再実行
9.Effect setup code runs 

非厳格モードが使用エアれたら、ただ次のステップに従って実行されます。

//コンポーネントのマウント
1.React mounts the component. 
//layoutの実行
2.Layout effects are created. 
 // Effectsの実行
3.Effect effects are created.

実際の作業で、開発に便利なために、「Strict Mode」を削除または閉めたりするのは一般的です。

Discussion