[React] useEffectの使い方

useEffectは関数が実行されるタイミングをレンダリングの後にすることができるHookで、APIからデータを取得して表示させる場合によく使われます。

コンポーネントが最初に読み込まれたときだけ実行、特定のステートに変化があったときのみ実行するなどの対応が可能となります。

レンダリング毎にuseEffectが実行されるケース

まず、ボタンをクリックするとクリック数が表示されるプログラムを作り、useEffectも記載してみます。

ボタンを押すとブラウザのコンソールにログが出力されます。クリックされる毎にログが出力されているのがわかります。

初回ローディング時のみにuseEffectが実行されるケース

useEffect関数のポイントは第二引数にあります。

上記のプログラムを以下のように変えてみます。

このように変えると、ページを読み込んだときだけログが出力されます。それ以降はボタンを押す毎にカウントは増えていきますが、ログは出力されません。

特定の変数の値が変化したときのみ反応するケース

今度は2つのカウントアップボタンを作ってみます。左側は押してもログを出力しない、右は押されるたびにログを出力するプログラムです。

useEffectの第二変数に、反応させたい変数を指定します。今回はcountB(右側のボタン)に反応します。

初回ローディングのときにログが出力されます。その後は右側のボタンを押したときだけログが出力されます。左右のボタン共にクリックするとカウント数は増加します。

useEffectのクリーンアップ

useEffectにはコンポーネントアンマウント時・次のHookが開始する前に実行されるクリーンアップ機能があります。

return()でクリーンアップを設定します。タイマーが動き続けてしまうのを止めることができます。



Author: webmaster