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

Reactのイベントハンドリングを高速化!パフォーマンス最適化の方法

イベントハンドリングのパフォーマンス最適化
イベントハンドリングのパフォーマンス最適化

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

生徒

「Reactでイベントをたくさん使うと動きが遅くなることがあります。どうすればいいですか?」

先生

「それにはイベントハンドリングのパフォーマンス最適化を行うことが大切です。」

生徒

「パフォーマンス最適化って、難しそうですね。」

先生

「ポイントを押さえれば初心者でもできます。まずは何が遅くなる原因かを理解しましょう。」

1. なぜReactのイベントで動作が遅くなるのか?

1. なぜReactのイベントで動作が遅くなるのか?
1. なぜReactのイベントで動作が遅くなるのか?

Reactではイベントが発生すると、そのたびにコンポーネントの再レンダリングが起こります。レンダリングとは、画面に表示されている内容をReactが最新状態に更新する処理です。イベントが多くなると、この再レンダリングが頻繁に発生し、結果として動作が遅くなることがあります。

つまり、ボタンをたくさんクリックしたり入力欄に文字を打ったりすると、毎回画面の更新処理が走るためパフォーマンスが落ちるのです。

2. useCallbackで関数をメモ化する

2. useCallbackで関数をメモ化する
2. useCallbackで関数をメモ化する

Reactでは、関数を毎回作り直すとパフォーマンスに影響します。useCallbackを使うと関数をメモリに保持し、不要な再生成を防ぐことができます。これにより、同じ関数が何度も作られることを避けられます。


import React, { useState, useCallback } from "react";

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

  const handleClick = useCallback(() => {
    setCount((prev) => prev + 1);
  }, []);

  return (
    <div>
      <h1>カウント: {count}</h1>
      <button onClick={handleClick}>増やす</button>
    </div>
  );
}

export default App;
(ボタンを押すとカウントが増えますが、handleClick関数は再生成されないためパフォーマンスが向上します)

3. 不要な再レンダリングを防ぐ

3. 不要な再レンダリングを防ぐ
3. 不要な再レンダリングを防ぐ

ReactではStateが変更されると、そのコンポーネントと子コンポーネントが再レンダリングされます。必要な部分だけを更新するように分けることで、処理を軽くできます。React.memoを使うと、同じpropsであれば再レンダリングを防ぐことができます。


import React, { useState, memo } from "react";

const CountDisplay = memo(({ count }) => {
  console.log("レンダリングされました");
  return <h1>カウント: {count}</h1>;
});

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

  return (
    <div>
      <CountDisplay count={count} />
      <button onClick={() => setCount(count + 1)}>増やす</button>
    </div>
  );
}

export default App;
(CountDisplayコンポーネントはcountが変わったときだけレンダリングされます)

4. イベントバブリングを活用する

4. イベントバブリングを活用する
4. イベントバブリングを活用する

HTMLのイベントは親から子へ伝わる「バブリング」という性質があります。Reactでもこの仕組みを利用し、親要素でまとめてイベントを処理することで、子要素にたくさんのイベントハンドラをつける必要がなくなり、パフォーマンスが向上します。

5. DebounceやThrottleを使った最適化

5. DebounceやThrottleを使った最適化
5. DebounceやThrottleを使った最適化

入力フォームやスクロールなど、連続してイベントが発生する場合は、DebounceやThrottleを使って処理回数を制御します。Debounceは最後の操作だけを処理し、Throttleは一定時間に一度だけ処理する方法です。これによりCPU負荷を減らし、パフォーマンスが向上します。

6. パフォーマンス最適化のまとめポイント

6. パフォーマンス最適化のまとめポイント
6. パフォーマンス最適化のまとめポイント
  • useCallbackでイベントハンドラをメモ化する
  • React.memoで不要な再レンダリングを防ぐ
  • イベントバブリングでハンドラをまとめる
  • DebounceやThrottleで連続イベントの処理を制御する
  • Stateは必要な部分だけに使い、軽量なUI設計を意識する

これらを実践することで、Reactアプリケーションのイベント処理を高速化し、滑らかで快適なユーザー体験を提供できます。

まとめ

まとめ
まとめ

Reactのイベントハンドリングとパフォーマンス最適化を振り返る

この記事では、Reactにおけるイベントハンドリングの仕組みと、パフォーマンスを意識した最適化の考え方について学んできました。 Reactはユーザー操作に応じて画面を動的に更新できる便利なライブラリですが、その反面、イベントの扱い方を誤ると 再レンダリングが頻繁に発生し、動作が重くなってしまうことがあります。 特にボタンクリックや入力フォーム、スクロール処理など、イベントが多く発生する場面では、 パフォーマンスへの影響を意識することが重要です。

Reactのイベント処理では、Stateの更新がトリガーとなってレンダリングが行われます。 そのため、イベントハンドラの中でどのようにStateを扱うかが、アプリケーション全体の動作速度に大きく関わってきます。 useCallbackを使ってイベントハンドラをメモ化することで、関数の再生成を防ぎ、 不要なレンダリングを抑えることができる点は、React初心者にとってもぜひ押さえておきたいポイントです。

また、React.memoを使ったコンポーネントの最適化により、 propsが変わらない限り再レンダリングされない仕組みを作ることができます。 これにより、画面の一部だけを効率よく更新でき、イベントが多い画面でも安定した動作を保つことが可能になります。 コンポーネント設計を細かく分ける意識も、Reactのパフォーマンス改善には欠かせません。

さらに、イベントバブリングを活用することで、複数の要素に個別のイベントハンドラを設定せずに済みます。 親要素でまとめてイベントを処理することで、コードの見通しが良くなるだけでなく、 イベント登録数を減らすことにもつながります。 この考え方は、実務のReact開発でもよく使われるため、ぜひ理解しておきましょう。

DebounceやThrottleといった手法は、入力フォームやスクロールイベントの最適化に特に有効です。 イベントが連続して発生する状況でも、処理回数を制限することでCPU負荷を軽減し、 快適な操作感を維持できます。 Reactのイベントハンドリングと組み合わせることで、より実践的なパフォーマンス対策が可能になります。

まとめとしてのサンプルプログラム

ここでは、useCallbackを使ってイベントハンドラを最適化する基本的なサンプルを改めて確認します。 イベント処理とState更新をシンプルに保つことで、Reactアプリケーションの動作を軽くすることができます。


import React, { useState, useCallback } from "react";

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

  const handleChange = useCallback((event) => {
    setText(event.target.value);
  }, []);

  return (
    <div>
      <input type="text" value={text} onChange={handleChange} />
      <p>入力内容: {text}</p>
    </div>
  );
}

export default App;

このように、イベントハンドラを安定させることで、 入力処理が多い画面でも無駄な再レンダリングを抑えることができます。 Reactのイベント最適化は、小さな積み重ねが大きなパフォーマンス改善につながります。

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

生徒

「イベントが増えると動作が遅くなる理由が、再レンダリングと関係していることがよく分かりました。」

先生

「その理解はとても大切ですね。Reactではイベント処理とState更新が密接に関係しています。」

生徒

「useCallbackやReact.memoを使うことで、必要な部分だけを更新できるのが印象的でした。」

先生

「そうです。最初から完璧を目指す必要はありませんが、 パフォーマンスを意識した書き方を少しずつ身につけていきましょう。」

生徒

「イベントバブリングやDebounceも、実務で役立ちそうだと感じました。」

先生

「その通りです。今回学んだ内容を意識するだけで、 Reactアプリケーションの動作は大きく改善されますよ。」

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

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

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

Reactでイベント処理が遅くなる原因は何ですか?

Reactではイベントが発生するたびにコンポーネントが再レンダリングされるため、イベントが多くなると動作が遅くなります。
カテゴリの一覧へ
新着記事
New1
React
Reactコンポーネントの再利用と分割を完全マスター!初心者でもわかるコンポーネント設計
New2
React
ReactでAxiosインターセプターの使い方を完全ガイド!初心者でもわかるリクエストとレスポンスの処理方法
New3
React
JSXの書き方!初心者でもわかるReactタグと属性の基本ルール解説
New4
React
ReactとDockerを使った開発環境構築の基本を徹底解説!初心者でもわかるReactとDockerの連携方法
人気記事
No.1
Java&Spring記事人気No1
React
ReactでonChangeイベントを使ってフォーム入力値を管理する方法を初心者向けに解説
No.2
Java&Spring記事人気No2
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.3
Java&Spring記事人気No3
React
Reactのイベントハンドリングのアンチパターンまとめ!初心者でもわかる注意点
No.4
Java&Spring記事人気No4
React
Reactのカスタムフックの作り方を完全ガイド!再利用可能なロジックを切り出す仕組み
No.5
Java&Spring記事人気No5
React
ReactでFetch APIのローディング状態を管理する方法|初心者にもわかる解説
No.6
Java&Spring記事人気No6
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.7
Java&Spring記事人気No7
React
ReactのuseStateとuseEffectでよくあるエラーと解決方法ガイド!初心者でもわかるReactフック
No.8
Java&Spring記事人気No8
React
Reactでファイルアップロードを実装する方法を解説!Fetch APIで画像やPDFを送る仕組みを初心者向けに紹介