从函数内部调用onClick

时间:2018-09-12 10:24:08

标签: reactjs react-rails react-bootstrap-table

我正在使用react-rails gem,我的代码具有以下结构。我在从函数内部生成的按钮调用onClick时遇到困难。

class AdminRevenueShareModelsSearch extends AlacrityTable {

    constructor(props) {
        super(props);   
        this.handleDelete = this.handleDelete.bind(this); 

        this.columns = [
            { path: "id", title: "ID", sort: true, isKey: true},
            { path: "name", title: "Name" },
            { path: "description", title: "Description"},
            { path: "", title: "Actions" , dataFormat: this.tableActions }

        ];
    }

   handleDelete(){
      console.log("assasa");
    }

    tableActions(cell, row, extra, index) {
      return (
        <Button
          bsStyle="default"
          onClick={this.handleDelete}
          title="Delete">
          <Glyphicon title="Delete" glyph="trash" />
        </Button>
      );
    }



render() {
    return (
      <div>
        <BootstrapTable data={ this.props.data }
                        remote={ true }
                        striped={true}
                        hover={true}
                        height={ 'auto' }
                        pagination={ true }
                        fetchInfo={ { dataTotalSize: this.props.totalDataSize } }
                        options={ {
                            sizePerPage: this.props.sizePerPage,
                            withFirstAndLast: false,
                            sizePerPageList: [ 5, 10, 20 ],
                            page: this.props.currentPage,
                            onPageChange: this.props.onPageChange,
                            onSortChange: this.props.onSortChange,
                            onFilterChange: this.props.onFilterChange,
                            noDataText: this.noDataText()
                        } }>
            {this.renderTableColumns()}
        </BootstrapTable>
      </div>
    );
}

我以前使用过onClick={this.handleDelete()},但收到错误消息“ this.handleDelete不是函数”。

3 个答案:

答案 0 :(得分:2)

如下所示的调用函数。

 onClick={ () => this.handleDelete()}

还将您的tableActions更改为箭头功能。

tableActions = (cell, row, extra, index) => {
  return (
    <Button
      bsStyle="default"
      onClick={this.handleDelete}
      title="Delete">
      <Glyphicon title="Delete" glyph="trash" />
    </Button>
  );
}

答案 1 :(得分:0)

我想上下文在某处丢失了(不确定,因为您还没有提供render函数)。 尝试使tableActions函数具有箭头功能:

 tableActions = (cell, row, extra, index) => {

如果这样做没有帮助,请提供渲染功能

答案 2 :(得分:0)

应该是

  onClick={this.handleDelete}

但不是

  onClick={this.handleDelete()}

如果要将参数传递给函数,则需要(),如下所示

  onClick={e => this.handleDelete(e)}