堆叠的父子组件未触发子组件的onClick事件

时间:2018-11-23 06:25:15

标签: javascript reactjs mouseevent

我具有以下两个组件,分别具有onClick()处理程序。问题是doSomethingElse永远不会得到,而直接doSomething被调用。

<ParentComponent onClick={this.doSomething}>
   <ChildComponent onClick={this.doSomethingElse} />
</Parent>

Childparent中显示为使用z-index的proover。

class Parent extends React.Component {
  constructor(props) {
    super(props);

  }

  handleP = (e) => {
    alert("parent")
  };

  render() {
    return (

      <div onClick={this.handleP} style={{
        left: 100,
        top: 100,
        zIndex: 100,
        position: 'absolute',
      }}>
      Parent Text
        <Child  />
      </div>          

    )
  }
}

class Child extends React.Component {
  constructor(props) {
    super(props);

  }

  handleC = (e) => {
    alert("child")
  };

  render() {
    return (

      <div onClick={this.handleC} style={{
        left: 1,
        top: 1,
        zIndex: 1000,
        position: 'absolute',
      }}>
      Child Text  
      </div>          

    )
  }
}



React.render(
  <Parent />,
  document.getElementById('react_example')
); 

Jsbin

1 个答案:

答案 0 :(得分:0)

@SandipPingle的原因是,默认情况下,单击事件会一直冒到窗口。因此,在调用子处理程序之后,事件会冒泡到父组件。为此,您需要停止事件传播。请参考此question和此sandbox以获得基于此答案的示例固定版本:)