【入門編】 クリーンアップ関数の実行順序とタイミング – React実践ガイド

こんにちは!Reactの世界へようこそ。
フロントエンドの荒波を渡り歩いてきた身として、今日はお話ししたいことがあります。

Reactを学び始めると、誰もが一度は「`useEffect`って何者? なんでこんなに言うことを聞いてくれないの?」と頭を抱える瞬間がありますよね。特に「クリーンアップ関数」という概念は、まるで難解なパズルのピースのように感じるかもしれません。

でも、大丈夫。コツさえ掴めば、これはあなたの最強の武器になります。今日は、この「後片付けの魔法」について、少しだけお茶を飲みながら一緒に紐解いていきましょう。

—

クリーンアップ関数は「退室時のお片付け」

`useEffect`を使うとき、私たちは「何かを始めたら、終わらせる準備もする」というルールを意識する必要があります。

想像してみてください。あなたは今、「カフェの席」に座ろうとしています。

1. 座る(エフェクト実行): 荷物を置き、PCを開いて仕事を始める。
2. 仕事中(エフェクト中): カフェで集中している状態。
3. 帰る(クリーンアップ関数): 席を立つ前に、ゴミを捨て、忘れ物がないか確認し、椅子を引く。

もしこの「お片付け」を忘れるとどうなるでしょう? 次の人が座るとき、前の人のゴミが残っていたら大変ですよね。Reactの世界でも同じです。前の情報の残り香(メモリリークや意図しない動作)を防ぐために、この「クリーンアップ関数」が非常に大切なのです。

クリーンアップ関数は「いつ」動くのか?

ここが一番のつまずきポイントです。実は、クリーンアップ関数は「次にエフェクトが実行される直前」か「コンポーネントが画面から消える(アンマウント)瞬間」に呼び出されます。

import { useEffect } from ‘react’;

function MyComponent() {
useEffect(() => {
console.log(“① カフェに座りました!”);

// これが「お片付け(クリーンアップ関数)」です
return () => {
console.log(“② さようなら、綺麗にして帰ります!”);
};
}, []); // 依存配列が空なら、コンポーネントが消えるときだけ動きます
}

依存配列が「変化したとき」の流れ

もし依存配列に値を入れると、こんなことが起こります。

1. 「あ、値が変わった!」とReactが気づく。
2. まず古い方のクリーンアップ関数を実行して、前の状態をリセットする。
3. 新しいエフェクトを実行して、最新の状態にする。

つまり、「古いものを片付けてから、新しいものを始める」という非常に丁寧な手順を踏んでいるんです。Reactって、実はすごくマメな性格なんですよ。

—

実践例:タイマーで理解する「お片付け」

例えば、画面に1秒ごとに数字が増えるカウンターを作るとしましょう。ここでクリーンアップを忘れると、タイマーが止まらずに何個も重なって動いてしまい、ブラウザが悲鳴を上げることになります。

import { useState, useEffect } from ‘react’;

function Timer() {
const [count, setCount] = useState(0);

useEffect(() => {
// タイマーを開始する
const interval = setInterval(() => {
setCount((prev) => prev + 1);
console.log(“カウント中…”);
}, 1000);

// クリーンアップ関数:コンポーネントが消える時、または再レンダリング前に実行
return () => {
clearInterval(interval); // ここでタイマーをしっかり止める!
console.log(“タイマーを掃除しました”);
};
}, []); // 空の配列なので、アンマウント時に一度だけ実行

return

{count} 秒経過

;
}

この `clearInterval(interval)` があるからこそ、画面を閉じてもタイマーが裏でずっと動き続けるという「幽霊タイマー」を防げるのです。

—

最後に:完璧じゃなくていい

初学者のうちは、「クリーンアップ関数を書き忘れてエラーになった!」なんてことは日常茶飯事です。僕も昔は何度もやらかしました。

大事なのは、「あ、この処理は終わらせておかないとまずいかも?」という直感を持つことです。

  • 通信のリクエストはキャンセルできるかな?
  • イベントリスナーは解除しなきゃいけないかな?

そうやって一つずつ、「後片付け」を意識するだけで、あなたの書くReactコードは驚くほどプロフェッショナルで、安定したものに変わっていきます。

今日から、`useEffect`を書くときは、セットで `return () => { … }` を書く癖をつけてみてください。その小さな習慣が、いつかあなたを救う大きな力になります。

もし迷ったり、つまずいたりしたら、いつでも戻ってきてくださいね。Reactの旅はまだ始まったばかり。ゆっくり、楽しみながら進んでいきましょう!

コメント

タイトルとURLをコピーしました