useEffect
にはレンダリング時の処理以外に,コールバックが関数を返すことにより,その処理をクリーンアップとして実行するという仕様があります.
具体的には,setInterval
を使いたい場合に,二重にintervalが走るのを防ぐために,useEffect
を使用することでスマートに実装することができます.
このようにuseEffect
はレンダリング時に必ず処理を実行したい場合でも明確に用途が分けられているため,クリーンアップが必要な処理をコンポーネントにベタ書きしたり,逆にクリーンアップが必要無い処理をむやみにuseEffect
で書くべきではありません.
もちろん特定の変数のみに依存して処理を行いたい場合は,useEffect
等を使用してパフォーマンスを損なわないようにする必要があります.