LoginSignup
4
5

More than 5 years have passed since last update.

簡単なイベントハンドラを自作してみる

Posted at

コンポーネント間で通信を行いたい

勉強がてら、簡単なイベントハンドラを自作しました。
Fluxとか色々流行っているみたいですが、いまいちよくわからず、
「コンポーネント間で、イベントを送受信できればとりあえずいいかな...」というヌルい気持ちで作りました。

class BasicService {
  constructor() {
    this.listers = [];
  }

  on(name, event) {
    this.listers.push({
      name: name,
      event, event
    });  
  }

  emit(name, args) {
    this.listers.forEach((func) => {
      if (name === func.name) {
        func.event.apply(func.event, args);
      }
    });
  }
}

実際に使うとこんな感じです。


const mysrv = new BasicService();

mysrv.on('eventSend', (e) => {
    console.log(e);
});

function test() {
    mysrv.emit('eventSend', [this]);
}

test();
  1. .on()でイベントをlistenし、.emit()でイベントを送信します。
  2. 送信したイベントと同名のイベントがlistenされていれば、on()の第二引数に指定した関数を実行します。
  3. emit()の第二引数で、onのコールバック関数の引数を指定できます。

小さいwebサービスくらいであれば、これくらいで事足りるんじゃないかな。。とか考えるんですが、(あとはonceとdeleteを追加するくらいかな)ダメでしょうか。どうでしょうか。
試してみたいと思います。

4
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5