こんにちは。Reactの世界へようこそ。
Reactを触り始めると、必ずと言っていいほど「壁」にぶつかる瞬間があります。それが「Reactの外側」との付き合い方です。
D3.jsでグラフを描いたり、Google Mapsで地図を表示させたり……。こうしたライブラリは、Reactとは別のルールでDOM(画面上の要素)を直接触りたがります。Reactが「僕が管理するから触らないで!」と言っているのに、横から手を出されるようなものですね。
この「お互いの領域侵犯」を安全に仲裁してくれるのが、`useEffect`という魔法の道具です。今日は、この付き合い方を「アパートの入居と退去」になぞらえて解説します。
—
1. なぜ「useEffect」が必要なの?
Reactは、画面を常に最新の状態に保つために、自分自身でDOMをせっせと書き換えています。一方で、D3.jsのようなライブラリは「ここに線を引け!」「この色に塗れ!」と、Reactとは無関係にDOMを操作します。
ここで喧嘩が起きないように、Reactはこう言います。
「わかった。君たちが仕事をするタイミングは僕が教えるから、それまでは待っていてね」
これが`useEffect`の正体です。
—
2. 「入居」と「退去」のイメージで理解する
`useEffect`の中身を書き始めるとき、一番大切なのは「準備(セットアップ)」と「片付け(クリーンアップ)」のペアを意識することです。
例えば、あなたがアパートに入居するときのことを想像してみてください。
1. 入居(セットアップ): 鍵をもらって、家具を配置する。
2. 退去(クリーンアップ): 次の人のために家具を片付けて、鍵を返して掃除する。
Reactで外部ライブラリを使うときも、これと同じです。「コンポーネントが表示されたら地図を読み込み、コンポーネントが消えるときは地図を破棄する」。このサイクルを守らないと、メモリの中に地図が何枚も重なってしまい、画面がカクついたり、思わぬバグを生んだりします。
—
3. 実践!地図ライブラリをラップしてみよう
では、実際にGoogle Mapsのようなライブラリを読み込む時のコードを見てみましょう。ポイントは「依存配列(`[]`)」の使い方です。
import React, { useEffect, useRef } from ‘react’;
function MapComponent() {
// 1. DOMの場所を指定するための「目印(ref)」を作ります
const mapRef = useRef(null);
useEffect(() => {
// — 2. 【入居】 ここでライブラリを動かします —
console.log(“地図の読み込みを開始します!”);
const map = new window.google.maps.Map(mapRef.current, {
center: { lat: 35.68, lng: 139.76 },
zoom: 8,
});
// — 3. 【退去】 ここが超重要!クリーンアップ関数です —
return () => {
console.log(“コンポーネントが消えるので、地図も綺麗に片付けます!”);
// ここでライブラリを初期化したり、イベントを解除したりします
map.unbindAll();
};
}, []); // 空の配列は「最初の一回だけ実行」という合図です
// 4. refをdivに渡すことで、Reactに「ここが地図の場所だよ」と伝えます
return
}
なぜ `return () => { … }` を書くの?
この`return`の中に書いた関数が、Reactが「もうこのコンポーネントはいらないな」と判断した時に自動で実行されます。これがないと、ページ遷移を繰り返すたびに地図がどんどん裏で増殖してしまい、ブラウザが重くなってしまいます。お部屋を借りたら、最後は綺麗にして返す。プログラミングも同じマナーが大切なんです。
—
4. つまずきやすいポイント:依存配列 `[]`
最後に、`useEffect`の末尾にある`[]`についてです。
- `[]` を書く: 「最初の一回だけやってね!」(初期化用)
- 何も書かない: 「毎回レンダリングされるたびに実行してね!」(これは重くなるので危険!)
- `[props.data]` のように書く: 「データが変わるたびに地図を更新してね!」
外部ライブラリを統合する時は、基本的には`[]`(最初の一回だけ)にしておき、データが変わった時だけ反応させたい場合は、`useEffect`の中で条件分岐を作るのが最も安全で「泥臭いけれど確実」な方法です。
—
最後に:完璧じゃなくていいんです
最初は「なぜこんなに面倒なことを?」と思うかもしれません。でも、この「Reactに任せるところ」と「自分で責任を持って片付けるところ」を意識できるようになると、あなたの作るアプリは驚くほど安定します。
うまくいかなくても大丈夫。コンソールにログを出して、「今、入居したかな?」「ちゃんと退去できたかな?」と確認するだけで、ぐっと理解が深まります。
Reactの世界を、これからも楽しんでくださいね!あなたのコードが、今日もどこかの誰かをワクワクさせているはずですよ。

コメント