【いべんとはんどりんぐ】

イベントハンドリング とは?

💡 「何か起きたら、こう動く」を決めておくプログラムの反射神経
📌 このページのポイント
イベント処理の流れ ユーザー操作 Click イベント生成 type: "click" target: btn リスナー検知 addEventListener ("click", handler) ハンドラ実行 function handler(e) {'{'} ... {'}'} UI更新 画面に 反映 1 2 3 4 5 具体例:ボタンクリック 🖱 ボタン押下 ClickEvent生成 バブリング開始 登録済リスナー がキャッチ カウンタ+1 処理実行 再描画 イベント駆動:ユーザーの操作を起点に、登録された処理が自動的に実行される
イベント処理の流れ
ひよこ ひよこ

イベントって具体的にどんなものがあるの?

ペンギン先生 ペンギン先生

ボタンのクリック(click)、テキスト入力(input)、フォーム送信(submit)、マウスの移動(mousemove)、スクロール(scroll)など。ブラウザはユーザーのあらゆる操作をイベントとして検知してくれる。

ひよこ ひよこ

バブリングってなに?

ペンギン先生 ペンギン先生

ボタンをクリックすると、そのボタンのイベント→親のdivのイベント→さらに親の…と泡のように上に伝わっていく。これがバブリング。event.stopPropagation() で伝搬を止められる。意図しない親要素の反応を防ぐのに使う。

ひよこ ひよこ

ReactとVanilla JSでイベントの書き方は違う?

ペンギン先生 ペンギン先生

Vanilla JSは element.addEventListener('click', handler) と書く。React

ひよこ ひよこ

イベントリスナーを大量に登録するとパフォーマンスに影響あるの?

ペンギン先生 ペンギン先生

あるよ。リスト1000行にそれぞれクリックイベントを付けると1000個のリスナーが登録されてメモリを食う。そこで使うのが「イベントデリゲーション」。親要素に1つだけリスナーを付けて、event.targetでクリックされた子要素を判定する。バブリングの仕組みを活用した効率的なテクニックだよ。

ひよこ ひよこ

イベントリスナーの解除を忘れるとメモリリークになるって本当?

ペンギン先生 ペンギン先生

本当だよ。SPAで画面遷移するときに古いリスナーを解除しないと、表示されていないコンポーネントのリスナーがメモリに残り続ける。Reactのuseeffectでreturnにクリーンアップ関数を書くのはまさにこの対策。addEventListenerしたらremoveEventListenerする習慣をつけるのがメモリリーク防止の基本だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
イベントハンドリングって出てきたら「ユーザー操作に反応して処理を動かす仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「event handling」 = 出来事の取り扱い
💬 event は「出来事」、handling は「扱い」で、発生した出来事に対処すること
← 用語集にもどる