如何停止在React组件中将事件传播到全局侦听器?

时间:2016-12-07 12:09:56

标签: javascript reactjs dom event-handling event-delegation

我有一个应该监听我页面上所有mousedown事件的组件

document.addEventListener('mousedown', listener)

现在让我们假设我的React应用程序中有一个按钮

<button 
  onMouseDown={e => e.stopPropagation()}
  onClick={e => doSomething()}
/>  

使用onMouseDown={e => e.stopPropagation()}不会阻止我的全局mousedown侦听器被触发,因为React使用事件委托(我想?)

使其运作的唯一方法是致电onMouseDown={e => e.nativeEvent.stopImmediatePropagation()}

从开发人员的角度来看,有没有办法让这更自然?我的意思是,向大型团队的每个人解释为什么常规e.stopPropagation()不起作用,事件委托如何工作等等都不是很方便......

那么,有什么我可以做的,以致在调用e.stopPropagation()时它实际上不会触发我的主要mousedown监听器吗?

是否有支持的方式,从我的监听器,过滤调用stopPropagation的事件(通过React或不是?)

有没有办法更改React处理委托事件的节点? (这里好像是document

0 个答案:

没有答案