「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > JavaScript におけるイベント委任とイベント伝播

JavaScript におけるイベント委任とイベント伝播

2024 年 8 月 26 日に公開
ブラウズ:391

Event Delegation vs Event Propagation in JavaScript

JavaScript 開発者は、多くの場合、Web アプリケーションでのイベントの処理方法を管理する必要があります。このコンテキストにおける 2 つの重要な概念は、イベント委任とイベント伝播です。これらの概念を理解すると、コードの効率と保守性が大幅に向上します。それらが何であり、どのように異なるのかを詳しく見てみましょう。

イベントの伝播

イベントの伝播は、イベントがトリガーされた後に DOM を通過する方法を記述します。イベントの伝播には 3 つのフェーズがあります:

1.キャプチャ フェーズ: イベントはウィンドウから開始され、ターゲットに到達するまでターゲット要素の祖先を通って下に移動します。

2.ターゲットフェーズ: イベントはターゲット要素に到達します。

3.バブルフェーズ: イベントは、ターゲット要素からその祖先を通ってウィンドウにバブルアップします。

デフォルトでは、JavaScript のほとんどのイベントはバブリング フェーズを使用します。これは、イベントが子要素でトリガーされると、そのすべての祖先要素でもトリガーされることを意味します。キャプチャ オプションを指定することで、キャプチャ フェーズ中にイベントを処理することもできます。

// Capturing phase
element.addEventListener('click', function(event) {
    console.log('Capturing phase:', this);
}, true);

// Bubbling phase (default)
element.addEventListener('click', function(event) {
    console.log('Bubbling phase:', this);
});

イベントの委任

イベント委任は、イベント伝播を利用してイベントを効率的に管理します。イベント リスナーを複数の子要素に追加する代わりに、単一のイベント リスナーを親要素に追加します。このリスナーは、イベント バブリングを利用して、子要素のイベントを処理します。

イベント委任の利点

1.パフォーマンス: イベント リスナーの数を減らすと、特に要素数が多い場合のパフォーマンスが向上します。

2.動的要素: 新しい要素ごとにイベント リスナーをアタッチする必要がないため、動的に追加された要素のイベント処理が簡素化されます。

イベント委任の例

各項目をクリックできる項目のリストを考えます。各アイテムにクリック イベント リスナーを追加する代わりに、単一のリスナーを親コンテナに追加します。

  • Item 1
  • Item 2
  • Item 3
const list = document.getElementById('list');

list.addEventListener('click', function(event) {
    if (event.target.tagName === 'LI') {
        console.log('Item clicked:', event.target.textContent);
    }
});

この例では、任意の li 要素のクリック イベントが、イベントを処理する ul 要素にバブルアップされます。

主な違い

1.イベントの伝播は、イベントが DOM 内をどのように移動するか (キャプチャとバブリング) に関するものです。

2.イベント委任は、イベント伝播を利用して、単一の親リスナーを使用して複数の子要素のイベントを効率的に処理する手法です。

使用例

イベント伝播を使用する場合

  • キャプチャまたはバブリングフェーズ中にさまざまなアクションを実行する必要がある場合。
  • イベントフローをより正確に管理したい場合。

イベント委任を使用する場合

  • 同じイベント処理を必要とする子要素が多数ある場合。

  • リスナーを再アタッチせずに、動的に追加された要素のイベントを処理する必要がある場合。

結論

イベント伝播とイベント委任はどちらも、JavaScript コードをより効率的で管理しやすくする強力な概念です。特にイベント委任により、イベント リスナーの数が大幅に削減され、パフォーマンスが向上し、動的要素のイベント処理が簡素化されます。これらの概念をいつどのように使用するかを理解すると、より熟練した JavaScript 開発者になれます。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/mdhassanpatwary/event-delegation-vs-event-propagation-in-javascript-m9n?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3