。
簡單的演示:
import EventEmitter from 'EventEmitter';
let x = new EventEmitter();
function handler(arg) {
console.log(`event-name has occurred! here is the event data arg=${JSON.stringify(arg)}`);
}
x.addListener('event-name', handler);
x.emit('event-name', { es6rules: true, mixinsAreLame: true });
爲addListener
完整簽名需要三個參數:
EventEmitter.addListener(eventName, handler, handlerContext)
在反應組件,您可能希望使用此背景下阿根廷,從而使處理器可以類方法,而不是內聯函數,仍然保留this == component instance
。例如: -
componentDidMount() {
someEmitter.addListener('awesome', this.handleAwesomeEvents, this);
// the generalist suggests the alternative:
someEmitter.addListener('awesome', this.handleAwesomeEvents.bind(this));
}
handleAwesomeEvents = (event) => {
let awesomeness = event.awesomeRating;
// if you don't provide context in didMount,
// "this" will not refer to the component,
// and this next line will throw
this.setState({ awesomeness });
};
FYI:我從看決然unmagical實施the infamous Subscribable mixin得到這個。 Google的搜索結果基本上是Ramsay單個混音演示的回聲室。
P.S.至於將這個發射器暴露給另一個器件,我可能會擁有擁有的器件提供用於接收發射器參考的功能,並且創建發射器的組件將隨後有條件地用發射器執行該道具。
// owner's render method:
<ThingThatEmits
onEmitterReady={(emitter) => this.thingEmitter = emitter}
/>
// inside ThingThatEmits:
componentDidMount() {
this.emitter = new EventEmitter();
if(typeof this.props.onEmitterReady === 'function') {
this.props.onEmitterReady(this.emitter);
}
}
來源
2016-09-22 19:10:09
Tom
這裏有人建議使用簡單地使用寫組件的「老辦法」:http://hi-tips.tumblr.com/post/137014836571/use-eventemitter-for-calling-child-component -event 我有同樣的問題,並想知道是否有任何適當的方式在ES6中做這個 –
我仍然在尋找這個。我不願意開始使用'react-mixin'。 – Tom