javascript - 防止React中的setState触发

标签 javascript reactjs dom-events

我有:

class SomeComponent extends Component {
  state = {
    outside: false,
    inside: false,
  }
  
  onOutsideClick = () => this.setState({ outside: true })
  
  onInsideClick = () => this.setState({ inside: true })

  render() {
    return (<div onClick={this.onOutsideClick}>Some text, <p onClick={this.onInsideClick}>some other text</p></div>)
  }
}

当我点击一些其他文本时,onOutsideClick处理程序也会触发,因此this.state.outside将更改为真的。如果点击其他文本,我不想触发任何其他方法。

我尝试在 onOutsideClick 中使用 e.stopPropagationif (this.state.inside) return 但这些都不起作用

最佳答案

您应该使用event.stopPropagation()来停止冒泡事件。很难说为什么 stopPropagation() 对您不起作用。

使用 stopPropagation() 进行工作演示:https://codesandbox.io/s/wpPJ1LkXR

import React, { Component } from 'react';
import { render } from 'react-dom';

const INSIDE_CLICK = 'inside';
const OUTSIDE_CLICK = 'outside';

class App extends Component {
  state = {
    clicked: undefined,
  };

  onOutsideClick = () => {
    this.setState({ clicked: OUTSIDE_CLICK });
  };

  onInsideClick = (event) => {
    event.stopPropagation();
    this.setState({ clicked: INSIDE_CLICK });
  };

  render() {
    return (
      <div onClick={this.onOutsideClick}>
        Some text, <p onClick={this.onInsideClick}>some other text</p>
        <div style={{ border: '2px solid red' }}>
          Clicked: {this.state.clicked}
        </div>
      </div>
    );
  }
}

render(<App />, document.getElementById('root'));

关于javascript - 防止React中的setState触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45020700/

相关文章:

javascript - jQuery:这些对于 find() 方法来说都是正确的吗?

javascript - 使用内联 CSS 在 HTML 表格中应用美元货币格式

javascript - 通过 props React 将 WS 连接传递给 child

javascript - 如何在单击按钮时打开和关闭下拉菜单,但同时与外部单击关闭?

javascript - 如何在页面加载后执行 JavaScript?

javascript - onFocus 和 onBlur 不会在 React 中渲染

typescript - 如何在 Typescript 中使用 EventTarget

javascript - Angular JS - 创建一个过滤器来比较 2 个数组

javascript - 实现包返回: Module util does not exist in the Haste module map

javascript - 输入字段清除按钮导致模糊事件 - 如何避免