カテゴリ: React 更新日: 2026/01/30

Reactでイベントハンドラを整理!コンポーネントに分離する方法を初心者向け解説

イベントハンドラをコンポーネントに分離して整理する方法
イベントハンドラをコンポーネントに分離して整理する方法

先生と生徒の会話形式で理解しよう

生徒

「Reactでボタンをクリックしたときの処理がどんどん増えてきました。コードが読みにくくなっています。」

先生

「それなら、イベントハンドラを別のコンポーネントに分けて整理すると見やすくなります。」

生徒

「コンポーネントに分けるってどういうことですか?」

先生

「イベント処理の関数やUIをまとめた部品を作ることで、親コンポーネントのコードがすっきりするということです。」

生徒

「具体的な例を見せてもらえますか?」

先生

「もちろんです。実際にボタンのクリック処理を別コンポーネントに分けてみましょう。」

1. イベントハンドラを別コンポーネントに分離する

1. イベントハンドラを別コンポーネントに分離する
1. イベントハンドラを別コンポーネントに分離する

Reactでは、ボタンやリンクのクリックなどのイベント処理を関数としてコンポーネント内に書きます。しかし、処理が増えてくると親コンポーネントが長くなり、読みづらくなります。この場合、イベントハンドラ専用の子コンポーネントを作るとコードが整理されます。


import React, { useState } from "react";

function ClickButton({ onClick }) {
  return <button onClick={onClick}>クリックしてね</button>;
}

function App() {
  const [message, setMessage] = useState("こんにちは!");

  const handleClick = () => {
    setMessage("ボタンがクリックされました!");
  };

  return (
    <div>
      <h1>{message}</h1>
      <ClickButton onClick={handleClick} />
    </div>
  );
}

export default App;
(画面に「こんにちは!」と表示され、ボタンを押すと「ボタンがクリックされました!」に変わります)

2. 分離のメリット

2. 分離のメリット
2. 分離のメリット

イベントハンドラを別コンポーネントに分離することで、次のようなメリットがあります。

  • 親コンポーネントのコードがすっきりして読みやすくなる
  • 同じボタンコンポーネントを他の箇所でも再利用できる
  • イベント処理のテストや管理がしやすくなる

例えば、大きなフォームで複数のボタンを扱う場合、それぞれのボタンのクリック処理を独立したコンポーネントにすると、親コンポーネントはフォーム全体のレイアウトだけに集中できます。

3. 複数のイベントハンドラも整理できる

3. 複数のイベントハンドラも整理できる
3. 複数のイベントハンドラも整理できる

ボタン以外のイベント、例えば入力フォームの変更イベントやマウスオーバーイベントも同じように分離できます。子コンポーネントにイベント処理をまとめることで、親コンポーネントはUI構造の定義だけに集中でき、可読性と保守性が向上します。


function InputField({ onChange }) {
  return <input type="text" onChange={onChange} placeholder="入力してね" />;
}

function App() {
  const [text, setText] = useState("");

  const handleChange = (event) => {
    setText(event.target.value);
  };

  return (
    <div>
      <p>入力内容: {text}</p>
      <InputField onChange={handleChange} />
    </div>
  );
}
(入力欄に文字を入れると、下に入力内容がリアルタイムで表示されます)

4. イベントハンドラ整理のポイント

4. イベントハンドラ整理のポイント
4. イベントハンドラ整理のポイント

イベントハンドラを整理する際は、次のポイントを意識しましょう。

  • 関数はなるべく子コンポーネントに渡して親の負担を減らす
  • 複数のイベント処理は用途ごとにコンポーネントに分ける
  • propsを活用して子コンポーネントに処理を伝える
  • コードの可読性を最優先にし、UIとロジックを分離する

これらの整理方法を使うと、Reactアプリの規模が大きくなっても保守性を保ちながら開発できます。

まとめ

まとめ
まとめ

Reactでイベントハンドラを整理し、別コンポーネントへ分離する方法は、初心者にとって最初は少しむずかしく感じられますが、仕組みを理解するととても扱いやすくなる重要な考え方です。とくに、ひとつのコンポーネントに処理が集中してしまうと、読みづらくなるだけでなく、どこで何をしているのか分かりにくくなり、予期しないエラーの原因にもなります。そのため、イベント処理を適切に分けて整理する習慣は、Reactを使った開発を続けるうえで欠かせない技術といえます。 今回学んだように、こコンポーネントへ関数としてイベントを渡し、必要なときに呼び出せるようにしておくと、コードの見通しが良くなり、再利用性も高まります。さらに、入力欄やクリックイベントなど、画面の操作に応じた処理を個別のコンポーネントとしてまとめておくことで、親コンポーネントは画面の全体構造だけに集中できるようになり、保守や修正がとても楽になります。 また、イベント処理とUIを意識的に分けることにより、アプリ全体の動作が把握しやすくなり、テストのしやすさも大きく向上します。これは小さなアプリだけでなく、画面数が増えたり複数人で開発したりする場面でもとても役に立つ考え方です。Reactでのイベント処理の整理は、単なる技術ではなく、これからの開発に必要不可欠な基礎力といえるでしょう。 下に、学んだ内容をまとめたサンプルを用意しました。複数のイベント処理を別コンポーネントに分けつつ、親と子がどのように関数を受け渡して連携するのかを復習できる構成になっています。

まとめサンプル:複数イベントハンドラを分離した実践例


import React, { useState } from "react";

function ActionButtons({ onClickA, onClickB }) {
  return (
    <div>
      <button onClick={onClickA}>あいさつする</button>
      <button onClick={onClickB}>色を変える</button>
    </div>
  );
}

function App() {
  const [message, setMessage] = useState("ようこそ!");
  const [color, setColor] = useState("black");

  const handleGreet = () => {
    setMessage("こんにちは!クリックありがとう!");
  };

  const handleColorChange = () => {
    setColor(color === "black" ? "blue" : "black");
  };

  return (
    <div>
      <h1 style={{ color: color }}>{message}</h1>
      <ActionButtons onClickA={handleGreet} onClickB={handleColorChange} />
    </div>
  );
}

export default App;
(あいさつボタンを押すと見出しの文字が更新され、色ボタンを押すと文字色が黒と青で切り替わります)

このサンプルでは、ふたつのイベント処理を子コンポーネントへわかりやすく渡すことで、親コンポーネントの責務が明確になり、どの処理がどこで動いているのか一目で分かるようになっています。親は画面の構造を管理し、子はイベントの役割に集中し、それぞれが独立したかたちで機能しています。このように整理されたコードは、後から読み返したときでもすぐに理解しやすく、修正にも強い構造になります。 イベント処理を分離する習慣は、アプリが複雑になるほどその効果を発揮します。最初は小さな部品の分離から始め、徐々に慣れていくことで、自然と構造のわかりやすいReactアプリを作れるようになります。今回学んだ内容を活かして、ぜひいろいろな画面で実践してみてください。

先生と生徒の振り返り会話

生徒

「今日のまとめを読んで、イベントハンドラを別コンポーネントに分ける理由がよく分かりました!親コンポーネントがすっきりするのはとても良いですね。」

先生

「その通りです。コードを整理して、どこで何が行われているか見やすくすることはとても大切です。Reactではとくにこの考え方が役立ちますよ。」

生徒

「ボタンの処理をまとめたコンポーネントをつくるだけで、こんなに分かりやすくなるのかとびっくりしました。これからも分離を意識して書いてみます!」

先生

「とても良い心がけですね。複雑な画面でも同じ考え方で整理できるので、ぜひ継続してみてください。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Reactでイベントハンドラとは何ですか?

Reactにおけるイベントハンドラとは、ボタンをクリックしたときなどのユーザー操作に反応して処理を実行する関数のことです。onClickやonChangeなどと一緒に使います。
カテゴリの一覧へ
新着記事
New1
React
Reactで再利用可能なリスト表示コンポーネントを実装しよう!初心者でもわかるReactのコンポーネント分割
New2
React
ReactのPropsとStateのベストプラクティスを整理しよう!初心者でもわかる使い方ガイド
New3
Next.js
Next.jsのRoute Groupの使い方を完全ガイド!App Routerでフォルダ構成を整理する方法
New4
Next.js
Next.js App Routerのtemplate.tsxの役割を完全解説!初心者でも理解できるレイアウト管理の基本
人気記事
No.1
Java&Spring記事人気No1
React
Reactでキーボードイベントを活用する方法!onKeyDown, onKeyUp, onKeyPressを初心者向けに解説
No.2
Java&Spring記事人気No2
React
Reactでフォーカスイベントを制御する方法!onFocusとonBlurを初心者向けに解説
No.3
Java&Spring記事人気No3
React
ReactのPresentational Componentを完全ガイド!初心者でもわかるStateを持たないコンポーネントの特徴
No.4
Java&Spring記事人気No4
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.5
Java&Spring記事人気No5
Next.js
Next.js Server Componentsのメリット・デメリットを完全解説!初心者でもわかるNext.jsの基本
No.6
Java&Spring記事人気No6
React
ReactでAxiosローディング状態を管理する方法を完全ガイド!初心者でもわかる非同期通信の基本
No.7
Java&Spring記事人気No7
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.8
Java&Spring記事人気No8
React
ReactでuseStateを使ったオブジェクト・配列の扱い方完全ガイド!初心者でもわかるReactフック