バブリングとは?意図せぬ誤作動を防ぐ仕組みと最新対処法を徹底検証
Q1:stopPropagation()とpreventDefault()の違いは何ですか?両方書く必要がありますか?
A1:役割が根本から異なります。stopPropagation()は「イベントが親要素へ伝播(バブリング)するのを防ぐ」メソッドであり、preventDefault()は「<a>タグのページ遷移やフォームの再読み込みなど、ブラウザ独自の規定動作を止める」メソッドです。伝播を止めたいだけであれば前者のみ、リンク自体の挙動をキャンセルしつつ親への波及も防ぎたい複合的なケースでのみ両者を併用します。
Q2:すべてのイベントがバブリングするのですか?
A2:いいえ、すべてのイベントがバブリングするわけではありません。代表的な例外として、フォーカス関連のfocusやblur、マウスホバー関連のmouseenterやmouseleaveなどはバブリングしません(代わりにバブリング対応版としてfocusinやfocusout、mouseoverやmouseoutが用意されています)。各イベントがバブリングするかどうかは、event.bubblesプロパティを参照することでブール値(true/false)として確認できます。
Q3:ReactやVueなどのモダンフレームワークを使っていてもバブリングは意識する必要がありますか?
A3:極めて重要です。Reactは独自の合成イベント(SyntheticEvent)システムを採用していますが、基本的なイベント伝播のメンタルモデルはDOM標準のバブリングに準拠しています。フレームワーク内部でのコンポーネントのネストが深くなるモダン開発だからこそ、バブリングによる予期せぬ状態変化の防止やイベント委譲の設計思想が不可欠となります。
タグ:
https://cantgetworse.com/uenowaki/6279526/