こんにちは。Reactの世界へようこそ。
Reactを触り始めると、必ずと言っていいほどぶつかる壁が「`useEffect`」という機能です。「画面が表示された瞬間にデータを取ってきたい」「ボタンを押した後の処理を書きたい」……そう思って`useEffect`を書き始めると、気づけばコンポーネントの中が、まるで散らかった子供部屋のように複雑なコードで埋め尽くされてしまう。そんな経験、ありませんか?
大丈夫です。それはあなたが悪いのではなく、`useEffect`が非常に「強力すぎる」道具だからです。
今日は、その散らかったコードを魔法のようにスッキリ片付ける「カスタムフック」という整理術について、お話ししますね。
—
コンポーネントは「演出家」であれ
まず、大切なマインドセットをお伝えします。Reactのコンポーネントは、本来「見た目の演出」を担当する場所であって、「裏方の雑用」を全部請け負う場所ではありません。
例えば、あなたがレストランのオーナーだとします。
キッチンで食材を切り、レジを打ち、掃除をし、接客まで一人でやっていたら、どうなるでしょうか? お店はすぐにパンクしてしまいますよね。
Reactも同じです。コンポーネントが「データの取得」「タイマーの管理」「外部ライブラリとの連携」まで全部やろうとすると、コードは読みづらくなり、どこで何が起きているのか分からなくなります。
そこで登場するのが「カスタムフック」です。これは、特定の「雑用」を専門に引き受けてくれる「プロのスタッフ」を雇うようなものだと考えてください。
—
実際に「タイマー処理」を切り出してみよう
例えば、画面が表示されてから一定時間後に何かのアラートを出すような機能を考えてみます。これを何も考えずに書くと、コンポーネントの中に`useEffect`が直接居座ってしまいます。
悪い例:コンポーネントが「何でも屋」になっている
function MyComponent() {
// コンポーネントの中に直接副作用が書かれている(これだと散らかりやすい!)
useEffect(() => {
const timer = setTimeout(() => {
console.log(“3秒経ちました!”);
}, 3000);
// クリーンアップ関数(タイマーを解除する掃除係)
return () => clearTimeout(timer);
}, []);
return
;
}
これでも動きますが、もしこの機能が他のページでも必要になったら? 同じコードをコピペすることになりますよね。それが「技術的負債」の始まりです。
良い例:カスタムフックで「専門スタッフ」を雇う
では、この「タイマー処理」という雑用を、`useTimer`というカスタムフックに丸投げしてみましょう。
// 専門スタッフ(カスタムフック)を定義します
function useTimer(callback, delay) {
useEffect(() => {
const timer = setTimeout(callback, delay);
// 画面が消える時などに、タイマーを止める「掃除係」
return () => clearTimeout(timer);
}, [callback, delay]); // ここでいつ実行するかを制御します
}
// コンポーネントは「何をするか」だけを指定すればOK!
function MyComponent() {
useTimer(() => {
console.log(“3秒経ちました!”);
}, 3000);
return
;
}
どうでしょう? `MyComponent`の中身が、驚くほど読みやすくなりましたよね。コンポーネントは「何をしたいか」という目的だけを伝えればよく、具体的な「どうやって実行するか(副作用の制御)」は、専門のカスタムフックが裏側で完璧にこなしてくれます。
—
なぜカスタムフックを使うと楽になるのか?
カスタムフックを使う最大のメリットは、「副作用をカプセル化できること」です。
1. 再利用性: 一度作れば、別のコンポーネントでも「名前を呼ぶだけ」でその機能が使えます。
2. 可読性: コンポーネントのコードを見た時に、「あ、これはタイマーを使っているんだな」と一目で分かります。
3. テストのしやすさ: 「タイマー処理」という小さな部品だけをテストすればいいので、バグの原因を特定しやすくなります。
—
最後に:完璧を目指さなくていい
最初は難しく感じるかもしれません。「どこまでをフックに切り出せばいいの?」と悩むこともあるでしょう。
そんな時は、こう考えてみてください。
「この処理、他の場所でも使いそうかな?」
「このコードがあるせいで、メインの処理が読みづらくなっていないかな?」
もしそう感じたら、それはカスタムフックを作る絶好のチャンスです。
Reactのコードを綺麗に保つコツは、一度に完璧にすることではなく、少しずつ「雑用」を「専門スタッフ」に振り分けていくことです。そうすれば、あなたのコードはもっと優しく、あなた自身のことを助けてくれるはずです。
もしつまずいても大丈夫。それはあなたがレベルアップしようとしている証拠です。またいつでも、この場所へ相談しに来てくださいね。応援しています!

コメント