所以我有一个处理程序,它使用以下代码接受不同类型的 $(".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
是所有事件的所有类型。
答案 0 :(得分:1)
所以我的主要问题是区分SyntheticEvent
和Event
类。我最初认为所有Event
都在React中转换为SyntheticEvent
。
添加element.addEventListener
之类的事件监听器时,回调会发出Event
个对象,而不是SyntheticEvent
。我使用的是addEventListener
而不是onClick
道具。