检查是否有任何对象是SyntheticEvent的正确方法?

Ash*_*man 7 reactjs

检查任何类型的给定对象是否为SyntheticEvent的最佳方法是什么?

目前,我正凝视内部:

if (obj.nativeEvent ) {
    // 100% sure...with this version of React
}
Run Code Online (Sandbox Code Playgroud)

什么是更惯用(或至少是面向未来)的方式?

小智 6

您可以使用以下检查:if (!(event instanceof Event))

event(是SyntheticEventfalse在这种情况下会给出,并且event.nativeEvent会给出true

  • e.nativeEvent && e.nativeEvent instanceof Event 将躲避您的 SyntheticEvent 实例,AFAICT 这是有效检查的唯一方法。 (3认同)
  • 谢谢,有帮助。但是,如果我不是要区分事件和合成事件,而是实际上要检查是否有任何对象是SyntheticEvent,该怎么办?问题编辑清楚 (2认同)

gpb*_*pbl 5

我检查是否obj.constructor.name === 'SyntheticEvent'.

  • 如果您使用的工具会影响生产版本中的函数名称,这会导致问题。我的产品版本中合成事件的 egeconstructor.name 是“W” (4认同)