事件传播与React冒泡无序

mik*_*tes 6 html javascript dom dom-events reactjs

鉴于以下代码,我希望3, 2, 1在单击数字时打印输出3.实际打印输出是1, 3, 2.

这是什么原因?

document.body.onclick = () => {
  console.log('1')
}

function Test() {
  return (
    <div onClick={() => console.log('2')}>
      2
      <div onClick={() => console.log('3')}>
        3
      </div>
    </div>
  )
}

ReactDOM.render(<Test/>, document.querySelector("#root"))
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<body>
1
<div id="root" />
</body>
Run Code Online (Sandbox Code Playgroud)

mik*_*tes 3

任何本机事件处理程序都会在 React 事件处理程序之前触发。

这就是 React 处理事件的方式:

  1. 它监听顶层的事件并将它们转换为综合事件
  2. 将它们放入池中以维持秩序
  3. 调度到 React 组件

因此,React 生态系统中的秩序得以维持,但相对于其他生态系统来说却是无序的。

如本视频所述:https://www.youtube.com/watch ?v=dRo_egw7tBc

并在文档中模糊地描述:https://facebook.github.io/react/docs/events.html#event-pooling