ブログblog

【React】useEffect()について

Writer: tokuyasu 更新日:2023/10/31

こんにちは、デジナーレ福岡オフィスの徳安です。
この記事では、useEffect()について説明します。

useEffect()

useEffect()は、コンポーネントを
外部システムと同期させるためのReactフック
・・・*外部システム(副作用)・・・
React の state に基づいて非React 製コンポーネントを制御したり
サーバとの接続を確立したり、
コンポーネントが画面に表示されたときに
分析用のログを送信したりするもの。
Reactではレンダーによって引き起こされる副作用のことを指す。

■useEffect(setup, dependencies?)

useEffect()はコンポーネントの
トップレベルでuseEffectを呼び出して、Effectを宣言する。

マウント      コンポーネントに対応するDOMノードを作成し、
  既存のDOMツリーに挿入して最終的なUIに出力するプロセスのこと。

アンマウント DOMノードが既存のDOMツリーから削除されること。

更新       既存のDOMツリーに存在するDOMノードに変更を加えること。

setup(第一引数):
初めてDOMに追加された時
Reactセットアップ関数を実行する。(マウント時)
(初回レンダー時は、すべての副作用はクリーンアップされている前提で、
 セットアップ関数のみ行う。)
*dependencies(依存配列)が変更された再レンダー時
React古い値を使ってクリーンアップ関数を実行
→その後新しい値を使用し、セットアップ関数を実行する。(更新時)
(更新時は、セットアップ関数を実行するので、
 先にクリーンアップを実行する。)

*コンポーネントがDOMから削除された時
Reactクリーンアップ関数を最後にもう一度実行する。(アンマウント時)
(削除時は、次回コンポーネントが呼ばれて、
 レンダリングされる際に、セットアップできるようにクリーンアップする。)

-- *第二引数を省略した場合 --
コンポーネントがレンダリングされるたびに、
React古い値を使ってクリーンアップ関数を実行、
その後新しい値を使用し、セットアップ関数を実行する。

-- *空の依存配列を渡した場合 --
セットアップ関数
初回レンダリング時の一度だけ実行する。

-- *依存配列を渡した場合 --
依存配列を設定すると、
エフェクトは最初のレンダー後及び
依存配列が変わった後のレンダー後に実行される。
React古い値を使ってクリーンアップ関数を実行
→その後新しい値を使用し、セットアップ関数を実行する。

 

クリーンアップ関数

useEffect()のセットアップ関数から
返された関数をクリーンアップ関数と呼ぶ。

セットアップを実行する前には、
必ずクリーンアップされている必要がある。
(初期状態である必要がある)

クリーンアップとは、エフェクトを停止させる

もしくはもとに戻す処理のことを指す。    

ライフサイクル

useEffect()は、
周囲のコンポーネントとは異なるライフサイクルを持つ
コンポーネントは
マウント、更新、アンマウントを行うことができる。
しかしエフェクトは
同期の開始と同期の停止の2つのことしかできない。
エフェクトが、propsやstateに依存し
これらが時間とともに変化する場合
このサイクルは繰り返し発生する。

ここまで読み進めていただきありがとうございます。