【问题标题】:How to unselect all rows from Material-UI's <Table> in ReactJS?如何从 ReactJS 中的 Material-UI 的 <Table> 中取消选择所有行?
【发布时间】:2016-10-26 17:34:49
【问题描述】:

我正在使用 Material-UI 的 &lt;Table/&gt; 和 ReactJS。目前我有&lt;Table/&gt; 选择所有复选框工作,它跟踪通过onRowSelection={this.handleRowSelection} 单击了哪一行。但是一旦我取消选中全选复选框,它就会取消选中除最后一行之外的所有行的复选框。

我怎样才能得到它以便取消选中全选复选框实际上会取消选择所有行的复选框?

代码如下:

export default class TestTable extends Component {
  constructor(props) {
    super(props)

    this.state = {
      clickedRowIds: [],
    }

    this.handleRowSelection = this.handleRowSelection.bind(this);
  }

  handleRowSelection(rowIds) {
    let rowsAll = []

    if (rowIds === 'all') { //get all the id's from data
      this.state.rows.map((row, index) => {rowsAll.push(index)})
    } else {
      this.setState({
        clickedRowIds: rowIds
      })
    }
  }

  render(){

    return(

      <div>
        <Table
          multiSelectable={true}
          onRowSelection={this.handleRowSelection}
        >
          <TableHeader
            displaySelectAll={true}
            enableSelectAll={true}
          >
              ...
              //rows is just an array of objects, and each row is represented by one object in that array
              {
              this.state.rows.map((row, index) => { return(<TableRow selected={this.state.clickRowIds.indexOf(rowIndex) !== -1}/> })
              }
          </TableHeader>
        </Table>
      </div>
    )
  }
}

【问题讨论】:

    标签: javascript reactjs react-jsx material-ui


    【解决方案1】:

    这里有一个错字——应该是“!==”而不是“!--”

    this.state.clickRowIds.indexOf(rowIndex) !-- -1
    

    【讨论】:

    • 它是!==,但只是错误地复制了它。还有其他问题吗?
    【解决方案2】:

    由于没有本地方法可以做到这一点,我有一个解决方法:

    1. 参考表体
    2. 清除 state.selectedRows 的 TableBody

    例子:

    参考

    <TableBody deselectOnClickaway={false} ref={tableBody => this.tableBody = tableBody}>
    

    清除选择

    this.tableBody.setState({ selectedRows: [] });
    

    【讨论】:

      【解决方案3】:

      这就是我解决完全相同问题的方法。 你的渲染方法应该返回这个:

      <div>
          <Table
            selectable={true}
            multiSelectable={true}
            onRowSelection={this.handleRowSelection}
          >
            <TableHeader
              displaySelectAll={true}
              enableSelectAll={true}
            >
            </TableHeader>
      
            <TableBody 
              displayRowCheckbox={true} 
              displaySelectAll={true} 
              deselectOnClickaway={false}
            >
                ...
            </TableBody>
      
      
          </Table>
        </div>
      

      【讨论】:

      • 你能解释一下你的答案是如何解决被问到的问题的吗?
      • 在添加该表配置之前,我遇到了同样的问题。
      • 我认为只需要deselectOnClickaway={false}。将其设置为true 会多次切换“全选”复选框。
      猜你喜欢
      • 2022-12-23
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多