0
0

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 1 year has passed since last update.

React.jsの副作用フックの第2引数と実行タイミングの関連を理解する

Posted at

Goal

副作用フック useEffect の第2引数の指定の違いで、実行タイミングがどのように変わるのかを理解します。

References

本文の手順は、次の文書を参考に作成しました。

Report

結論は、副作用フックの実行タイミングは、第2引数の指定の違いで、次の表の通りに変わります。

第2引数 メイン処理 クリーンアップ処理
なし コンポーネントの初回を含む毎回のレンダリング終了後に実行される。 副作用フックの次回のメイン処理実行前、もしくはコンポーネントのアンマウント時に実行される。
空の配列([]) コンポーネントの初回のレンダリング終了後に実行される。 同上。
変数配列([x ...]) 配列に指定した変数に変更があった場合、コンポーネントの初回を含む毎回のレンダリング終了後に実行される。 同上。

調査は、次のソースコードを使用し、副作用フックの第2引数の指定の違いで、コンソールログの出力がどのように変わるのかを観察しました。

import React, { useState, useEffect } from 'react';
import './App.css';

const App = (props) => {
  const [count, setCount] = useState(0);

  useEffect(() => {
    console.log('App.effect.invoke');
    return () => {
      console.log('App.effect.cleanup');
    };
  });

  return (
    <div>
      count: {count} <button onClick={() => setCount(count + 1)}>count up</button>
    </div>
  );
};

export default App;
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?