1

我正在使用材料表来显示表格数据。并为表外的特定列添加过滤器。

示例: https ://material-table.com/#/docs/features/filtering

我想单独使用表外的选择下拉菜单过滤“出生地”数据,而不是在列标题内

4

1 回答 1

0

我认为材料表只包含基本功能,所以你问的不是开箱即用的。

最简单的解决方案是将表格包装在其他组件中,该组件将包含 jsx 中的表格和“出生地”选择,状态中的出生地过滤表格数据以及作为类属性的表格数据。

最初

过滤表数据 = 表数据

它代理到表组件。在birthPlaceSelect onChange事件中,您应该实现过滤tableData并将其状态设置为filteredTableData

所以基本上你自己过滤表外的数据。

class FilterableTable extends Component {
  state = {
    filteredTableData: [],
    birthPlace: null,
  };

  componentDidMount() {
    // load data or get it from store in loadDataFromServer
    loadDataFromServer().then(data => {
      // save initial data to state
      this.setState({ filteredTableData: data });
      // and save copy to class prop
      this.data = data;
    });
  }

  onFilterValueChanged = ev => {
    if (ev.target.value) {
      this.setState({
        filteredTableData: this.data.filter(row =>
          row.birthPlace.contains(ev.target.value)
        ),
      });
    }else{
      this.setState({
        filteredTableData: this.data        
      });
    }
  };


  render() {
    const { filteredTableData, birthPlace } = this.state;

    return (
      <div>
        <input value={birthPlace} onChange={this.onFilterValueChanged} />
        <MaterialTable data={filteredTableData} />
      </div>
    );
  }
}
于 2019-10-08T11:07:54.787 回答