JavaScript: EventTargetでイベントを送受信する方法
この投稿ではJavaScriptのEventTarget
を使って、ブラウザ上でイベントを送信したり受信したりする方法を紹介します。
サーバサイドでNode.jsを使っていると、ビルトインライブラリにeventsがあり、EventEmitterクラスでイベントの送受信ができて便利ですが、これはNode.js固有のものなのでブラウザでは使えません。代わりに、クライアントサイドではEventTargetを使うことで、EventEmitterのようなことができます。
EventTargetは多くのブラウザが対応
EventTarget
は、多くのブラウザが対応しており、特に外部ライブラリのインストールを必要としません。
EventTargetの基本的な使い方
まず、EventTarget
をnew
します。
const events = new EventTarget()
イベントを受信するイベントリスナーの登録は、addEventListener
メソッドでします:
const fooListener = ({ type, detail }) => console.log({ type, detail })
events.addEventListener('foo', fooListener)
イベントリスナーの第一引数のオブジェクトにはいろいろな情報が入ってきますが、type
プロパティとdetail
プロパティは重要です。type
プロパティにはイベント名が、detail
プロパティには送信されたイベントのカスタムデータが入ってきます。
イベントを送信するには、dispatchEvent
メソッドを使います:
events.dispatchEvent(new CustomEvent('foo', { detail: 'message1' }))
dispatchEvent
の第一引数は、CustomEvent
です。CustomEvent
コンストラクタには第一引数にイベント名、第二引数のdetail
プロパティに一緒に送りたいカスタムデータを入れます。上の例ではdetail
に文字列を入れていますが、配列やオブジェクトでも大丈夫です。
以上の基本的な使い方を踏まえて、イベントの送受信をする簡単なサンプルコードが次です:
// EventTargetの作成
const events = new EventTarget()
// イベントリスナーの登録
const fooListener = ({ type, detail }) => console.log({ type, detail })
events.addEventListener('foo', fooListener)
// イベントの送信
events.dispatchEvent(new CustomEvent('foo', { detail: 'message1' }))
events.dispatchEvent(new CustomEvent('foo', { detail: 'message2' }))
events.dispatchEvent(new CustomEvent('foo', { detail: 'message3' }))
これを実行すると、3つのイベントが送信され、イベントリスナーはその3イベントを受信します。Chromeでの実行結果は次のようになります:
以上が、EventTargetの基本的な使い方です。
関連ページ
Author And Source
この問題について(JavaScript: EventTargetでイベントを送受信する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/suin/items/c15244c158d67fc9ceba著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .