antd table rowSelection多选框(可选择列表)

可选择列表

在这里插入图片描述
如上图,是antd的可选择列表,我们如何将普通列表变成可选择列表呢,这就用到了一个很重要的属性rowSelection。

rowSelection

如下图,rowSelection属性是一个对象,他有很多的参数。
在这里插入图片描述
下面是antd官网截图,关于rowSelection的功能配置。在这里插入图片描述

指定可选择列的属性作为key

注意:其中有个很重要的点,就是selectedRowKeys默认取得是列表的第一项,如果你想指定key,就要在table增加rowKey={record => record.id},id可以换成record的任意值。

// selectedRowKeys表示所选择列的key是一个字符串,selectedRows表示所选列的信息,是一个数组
 rowSelectionChange = (selectedRowKeys, selectedRows) => {
    console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
    this.setState({
      selectedRowKeys: selectedRowKeys
    })

  }

render() {
    const { form } = this.props;
    const {
      tabData,
    } = this.state;

    const rowSelection = {
      onChange: (selectedRowKeys, selectedRows) => {
        this.rowSelectionChange(selectedRowKeys, selectedRows)
      },
    };
    return (
      <Fragment>
          <Row style={{maxHeight: 100, overflowY: "auto" }}>
             <Table
               columns={this.columns}
               dataSource={tabData}
               pagination={false}
               scroll={{ x: "max-content" , }}
               rowSelection={rowSelection}
               rowKey={record => record.id}
             />
           </Row>
      </Fragment>
    );
  }
### a-table 表头配置及用法 #### 配置表头样式 对于 `a-table` 组件,可以通过设置 `columns` 属性来定义表头及其样式。每列的信息通过对象数组的形式传入,在这些对象中可以指定诸如标题 (`title`)、数据索引 (`dataIndex`) 和宽度 (`width`) 等属性。为了自定义表头单元格的样式,可以在对应的列描述符里加入 `headerStyle` 字段。 ```javascript const columns = [ { title: '姓名', dataIndex: 'name', key: 'name', width: 150, headerStyle: { backgroundColor: '#f0f2f5', textAlign: 'center' } // 自定义表头样式 }, ... ]; ``` #### 添加筛选功能 类似于 Bootstrap-table 提供的功能[^2],Ant Design 的 `a-table` 支持在表头上添加过滤器。这允许用户基于特定条件对表格内的数据进行筛选。实现这一特性需利用 `filters`, `filteredValue` 及 `onFilter` 方法: ```javascript { title: '年龄', dataIndex: 'age', filters: [{ text: '少年 (<18)', value: '<18' }, { text: '成年 (>=18)', value: '>=18' }], filteredValue: this.state.ageFilteredValue || null, onFilter: (value, record) => { const age = parseInt(record.age); switch(value){ case "<18": return age < 18; case ">=18": return age >= 18; default: return true; } } } ``` #### 实现多级表头 当涉及到复杂的数据展示场景时,可能需要创建具有多个层次结构的表头。此时可通过嵌套的方式构建 `columns` 数组,其中每一层代表一个级别的分组。需要注意的是,并不是所有的子项都适合被移动或调整位置;某些固定的头部应当保持静止不动,正如 element-ui 中处理多级表头拖拽的情况所提到的一样[^3]。 ```javascript [ { title: '基本信息', children: [ { title: 'ID', dataIndex: 'id', key: 'id' }, { title: '名称', dataIndex: 'name', key: 'name' } ] }, { title: '联系信息', children: [ { title: '电话', dataIndex: 'phone', key: 'phone' }, { title: '邮箱', dataIndex: 'email', key: 'email' } ] } ] ``` #### 增加全选/取消全选按钮 为了让用户能够方便地一次性选定整个表格中的所有行,可在工具栏或其他合适的位置放置一个多选框用于控制全局的选择状态。此操作通常涉及监听复选框的变化事件并更新内部的状态变量,从而影响到其他关联组件的行为。这里借鉴了 element ui 对于 el-table 表头多列添加可全选功能的做法[^4]。 ```jsx import React from 'react'; import { Table, Checkbox } from 'antd'; class App extends React.Component { state = { selectedRowKeys: [], // Check here to configure the default column loading: false, }; onSelectChange = selectedRowKeys => { console.log('selectedRowKeys changed: ', selectedRowKeys); this.setState({ selectedRowKeys }); } render() { const rowSelection = { selectedRowKeys: this.state.selectedRowKeys, onChange: this.onSelectChange, getCheckboxProps: record => ({ disabled: record.name === 'Disabled User', // Column configuration not to be checked name: record.name, }), }; return ( <> <div style={{ marginBottom: 16 }}> <Checkbox indeterminate={this.state.selectedRowKeys.length > 0 && this.state.selectedRowKeys.length < data.length} checked={this.state.selectedRowKeys.length === data.length} onClick={(e) => e.stopPropagation()} onChange={() => this.setState({ selectedRowKeys: this.state.selectedRowKeys.length === data.length ? [] : data.map(item => item.key), })} > 全选 </Checkbox> </div> <Table rowSelection={rowSelection} columns={columns} dataSource={data} /> </> ); } } export default App; ```
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值