1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【React】useEffect の動きを見てみる

Last updated at Posted at 2021-08-06

useEffectとは

コンポーネントがレンダリングされる際に実行したい処理を制御するための機能。

ちなみにコンポーネントが再レンダリングされる条件は以下である

  1. stateが更新されたとき
  2. propsが更新されたとき
  3. 親コンポーネントが再レンダリングされるとき

基本構文

useEffect(() => {
  // ① 実行させたい処理
  return () => {
    // ② ①の処理と対の関係になるクリーンアップ関数(省略可能)
  };
}, [依存配列]); // ③ 第1引数の実行タイミングを制御する値

依存配列を空配列にした場合

初回レンダリング時の一度だけ①が実行される。
再レンダリングされても実行されない。

  • マウント時:①が実行
  • アンマウント時:②が実行
useEffect(() => {
  // ① 実行させたい処理
  console.log("");
  return () => {
    // ② ①の処理と対の関係になるクリーンアップ関数
    console.log("");
  };
}, []); // ③ 依存配列を空配列にする

依存配列に値を指定する場合

依存配列に変数countを指定し、countに関心を持たせる。
初回レンダリング時に①が実行されることは変わらないが、その後countが更新されると②、①の順番で実行される。

②が実行 → ①が実行
useEffect(() => {
  // ① 実行させたい処理
  console.log(`① count:${count}`);
  return () => {
    // ② ①の処理と対の関係になるクリーンアップ関数
    console.log(`② count:${count}`);
  };
}, [count]); // ③ 依存配列に変数 count を指定

依存配列を更新して動きを確認してみる

変数countを更新するボタンがあり、ボタンを押すとcountが1ずつ増えていきボタンの上の数字も増えていくというもの。

※文字の大きさが違うのは気にしないでください。スクショが下手なだけです。笑

マウント時(初回レンダリング時)

View Console

2にカウントアップ(countを更新)

View Console

3にカウントアップ(countを更新)

View Console

ここで注目したい部分としては、

②が実行 → ①が実行

の順番で実行されるのだが、②が実行されるときのcountはカウントアップされる前(値が更新される前)の状態で実行されているということである。
①が実行されたときの状態で②が実行されるようである。

使い所としては、
①でリスナーや監視処理をセットして、②で①でセットした処理を解除する
というものが考えられる。
(Reactの公式では、Subscriptionの設定などに触れられていた)

最後に

大変わかりやすく参考にさせていただきました!
ありがとうございました!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?