【问题标题】:reactjs stop propagation, call another function to setStatereactjs停止传播,调用另一个函数来setState
【发布时间】:2016-11-13 21:20:31
【问题描述】:

我在整个组件上附加了一个 Onclick,只要单击它就会关闭组件:

   <div className="container" onClick={this.onClick.bind(this,'str')}>
            {this.state.showtoggle ? <Child2 /> : <Child1 />}
          </div>

但是在 child2 组件内部,我不希望整个组件都可以点击。 1)我可以将点击处理程序附加到 Child1 - 使用此条件逻辑 2) 或者我试图在 child2 中停止传播 - 但是在 preventDefault 之后状态没有按预期更新......有什么想法吗?

CHild2 中的代码:

 handleClick(event){
    event.preventDefault();
    event.stopPropagation();
    event.nativeEvent.stopImmediatePropagation();
    if(event.target.name === 'b2'){
          this.setState({
        toggleClassname: 'b2',
    });
    }
  } 

<button name="b1" onClick={this.handleClick} className={`btn-element ${(this.state.toggleClassname === 'b1') ? 'red' : ''}`}>button1</button>

<button name="b2" onClick={this.handleClick} className={`btn-element ${(this.state.toggleClassname === 'b2') ? 'red' : ''}`}>button2</button>

【问题讨论】:

    标签: reactjs preventdefault stoppropagation event-propagation


    【解决方案1】:

    您可以将onClick 传递给 Child1,然后将其附加到 Child 1 中的按钮。

    var onClick = this.onClick.bind(this,'str');
    <div className="container">
            {this.state.showtoggle ? <Child2 onClick={onClick} /> : <Child1 onClick={onClick} />}
          </div>
    

    孩子1:

    class Child1 extends React.Component {
      static propTypes = {
        onClick: React.PropTypes.func
      }
    
      render() {
        return <button name="b1" onClick={this.props.onClick}>button1</button>
      }
    }
    

    孩子2:

    class Child2 extends React.Component {
      static propTypes = {
        onClick: React.PropTypes.func
      }
    
      render() {
        return <div><img onClick={this.props.onClick}/></div>
      }
    }
    

    基本上你只需要为你的自定义组件手动重新实现onClick,这有点令人困惑。

    【讨论】:

    • 我在 中仍然需要这个 onclick 处理程序,但不是在整个组件上只是在 Child2 内的图像点击上,而是在整个 child1..?我该怎么做?
    • 更新了答案,基本上只是对两个组件做同样的事情,将点击处理程序放在需要的地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多