Button的onClick每秒被调用数百次

时间:2019-06-20 21:31:34

标签: javascript reactjs react-bootstrap

我有一个onClick函数,该按钮每秒被调用数百次,而没有任何实际的鼠标交互。

  constructor(props, context) {
    super(props, context);

    this.state = {
      show: this.props.show,
      store: this.props.store,
      price: this.props.price,
      category: this.props.category,
      date: this.props.date,
      shown: "inline",
      id: this.props.id
    };
  }
  kill = () => {
    this.props.kill(this.state.id);
  };
  render() {
    const divStyle = {
      padding: "1em",
      border: "1px solid black"
    };
    function trashCanVisible() {}
    function trashCanAway() {}

    return (
      <div display={this.state.shown}>
        <link
          rel="stylesheet"
          href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
          integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
          crossOrigin="anonymous"
        />
        <Button variant="light">
          <Container>
            <Row>
              <div style={divStyle}>
                <Col>
                  <FontAwesomeIcon icon={faFilePdf} size="8x" />
                </Col>
              </div>
              <Col>
                <table>
                  <thead>{this.state.store}</thead>
                  <tr>
                    <td>{this.state.date}</td>
                  </tr>
                  <tr>
                    <tfoot>${this.state.price}</tfoot>
                  </tr>
                  <tr>
                    <td />
                  </tr>
                  <tr>
                    <p>{this.state.category}</p>
                  </tr>
                  <tr>
                    <td>{this.state.description}</td>
                  </tr>
                </table>
              </Col>
              <Col>
                <Button variant="light" onClick={this.kill()}>
                  <FontAwesomeIcon icon={faTrashAlt} size="1x" />
                </Button>
              </Col>
            </Row>
          </Container>
        </Button>
      </div>
    );
  }
}

onClick={this.kill()}函数引用了kill()函数,这是一个传递的函数,它引用了父类中的函数pop()

pop(id) {
    console.log("pop" + id);
  }

我希望底部的按钮上的onClick=kill()功能仅在单击时才能运行。但是,它始终运行,并提供一个完整的“ pop1”控制台输出。

2 个答案:

答案 0 :(得分:2)

替换

        <Button variant="light" onClick={this.kill()}>

使用

                <Button variant="light" onClick={this.kill}>

您要在初始化期间调用kill()方法,这不是您想要的。您希望在onClick方法中传递对该函数的引用,因此仅在onClick()触发时才调用该引用的函数。

答案 1 :(得分:1)

将其更改为onClick={() => this.kill()},您应该会很好?