コンポーネント間で通信を行いたい
勉強がてら、簡単なイベントハンドラを自作しました。
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();
- .on()でイベントをlistenし、.emit()でイベントを送信します。
- 送信したイベントと同名のイベントがlistenされていれば、on()の第二引数に指定した関数を実行します。
- emit()の第二引数で、onのコールバック関数の引数を指定できます。
小さいwebサービスくらいであれば、これくらいで事足りるんじゃないかな。。とか考えるんですが、(あとはonceとdeleteを追加するくらいかな)ダメでしょうか。どうでしょうか。
試してみたいと思います。