【React.js/Next.js】React Hooks useEffect 完全入門

React.js / Next.js

React Hooks の useEffect ってどんな機能があるの?

今回は、React Hooks の中でも特によく使用される useEffect についてご紹介します。

useEffect とは?

useEffect とは、React.js画面が表示された後(レンダリング完了後)に、UIの描画以外の処理(副作用:Side Effects)を行うためのHook です。
API通信 タイマー処理、ブラウザ操作など、画面描画だけでは完結しない処理 を書くために useEffect を使用します。

主な UI の描画以外の処理(副作用:Side Effects) には、次のようなものがあります。

  • データ取得(API通信: fetch / axios)
  • タイマー・定期処理(setInterval / setTimeout)
  • DOM操作
  • イベントリスナーの登録・解除
  • 外部ライブラリとの接続(WebSocket、Firebase など

書き方

基本的なコード例

処理フロー

  1. 画面が表示される
  2. useEffect 内のコードが実行される
  3. ログが2つ表示される
    React18以降では開発モードでStrictModeが有効な場合はuseEffectが2回実行される
    本番環境では1回のみ実行される

「画面が表示された!」が2回表示される

useEffect を2回実行されないようにするには

StrictModeを無効(コメントアウト)にする 一番簡単

「画面が表示された!」が1回のみの表示になる

参考サイト

useEffect はいつ実行される?

実行のタイミングは、下記の 3パターン があります

最初の1回だけ ※一番よく使う

React18以降では開発モードStrictModeが有効な場合はuseEffectが2回実行される

初回と値が変更されたとき

毎回実行 ※あまり使わない

依存配列([])とは?

依存配列([])とは、 “いつ実行するか” を指定する場所のことです。

書き方意味
[] ※迷ったらこちらを使用する最初の1回だけ
[変数]初回と変数が変更したら
なし毎回

クリーンアップとは?

useEffectのクリーンアップ とは、useEffectで行った処理を元に戻したり後処理をするための機能 です。
主に 画面遷移などでコンポーネントが画面から消えるとき や、次の useEffect が実行される直前 に呼ばれます。

例:タイマーのクリーンアップ

タイマーは、コンポーネントが消えた後も動き続けてしまう ため、バグやメモリリークを防ぐ目的でクリーンアップが必要 です。

➡️ タイマーやイベントリスナーを使う場合は、必ず後処理を行いましょう。

やってはいけないこと

❌ useEffect の中で無限ループ

❌ 何でも useEffect に書く

useEffect のその他の使用例

データ取得(API通信)

  • 画面描画後に一度だけ データ取得(API通信)を実行
  • 初期データのロードに最適

イベントリスナー登録・DOM操作

  • 画面サイズの変化を監視
  • コンポーネントが消えたら解除

外部ライブラリとの連携

  • WebSocketFirebase などの接続・購読処理
  • コンポーネント終了時に安全に接続を切る

まとめ

React Hooks の useEffect  について、いかがでしたでしょうか?

まずは基本的な使い方をしっかり押さえ、データ取得のAPI通信やタイマー、イベントなどのシンプルな処理 を小さなコンポーネントで試しながら、クリーンアップ とセットで少しずつuseEffect に慣れていきましょう。

コメント

タイトルとURLをコピーしました