如何在Flow中优化合成事件?

时间:2017-09-10 09:58:18

标签: javascript reactjs generics ecmascript-6 flowtype

所以我有一个处理程序,它使用以下代码接受不同类型的 $(".jd-nav-arrow").click(function(){ $(this).siblings(".sub-menu").toggle(0, function(){ }); });

SyntheticEvent

但是,上面的代码会针对 defaultProps = { events: [ 'mousemove', 'keydown', 'wheel', 'DOMMouseScroll', 'mouseWheel', 'mousedown', 'touchstart', 'touchmove', 'MSPointerDown', 'MSPointerMove', ], element: (typeof window === 'undefined' ? 'undefined' : typeof window) === 'object' ? document : {}, } componentDidMount() { this.props.events.forEach((eventName: string) => { if (this.props.element) { this.props.element.addEventListener( eventName, this.handleEvent(), ); } }); } handleEvent = (event: SyntheticEvent<*>): void => { if (event instanceof MouseEvent) { // This event is a MouseEvent. } else if (event instanceof KeyboardEvent) { } else { } } 引发错误MouseEvent (this type is incompatible with SyntheticEvent)。起初我以为KeyboardEvent是所有事件的所有类型。

1 个答案:

答案 0 :(得分:1)

所以我的主要问题是区分SyntheticEventEvent类。我最初认为所有Event都在React中转换为SyntheticEvent

添加element.addEventListener之类的事件监听器时,回调会发出Event个对象,而不是SyntheticEvent。我使用的是addEventListener而不是onClick道具。