antd-table-react(在table组件外实现全选)

效果图如下:

 

代码实现:

import styles from './index.less';
import React, { useEffect, useState } from 'react';
import { Table, Button} from 'antd';

const columns = [
  {
    title: 'Name',
    dataIndex: 'name',
    render: (text: string) => <a>{text}</a>,
  },
  {
    title: 'Age',
    dataIndex: 'age',
  },
  {
    title: 'Address',
    dataIndex: 'address',
  },
];
interface DataType {
  key: React.Key;
  name: string;
  age: number;
  address: string;
  disabled: boolean;
}

const data: DataType[] = [
  {
    key: '0',
    name: 'John Brown',
    age: 32,
    address: 'New York No. 1 Lake Park',
    disabled: false,
  },
  {
    key: '1',
    name: 'Jim Green',
    age: 42,
    address: 'London No. 1 Lake Park',
    disabled: false,

  },
  {
    key: '2',
    name: 'Joe Black',
    age: 32,
    address: 'Sidney No. 1 Lake Park',
    disabled: false,

  },
  {
    key: '3',
    name: 'Disabled User',
    age: 99,
    address: 'Sidney No. 1 Lake Park',
    disabled: true,
  },
];

export default function IndexPage() {
  const [selectedRowKeys, setSelectedRowKeys]=useState([]);
  const [selectedRows, setSelectedRows]=useState([]);
  const [newData, setNewData]=useState([]);
  useEffect(()=>{
    // 过滤disabled为false的数组
    const afterFliterData:any = data.filter(v=>v.disabled===false);
    setNewData(afterFliterData);
  },[]);
  const handleChange = (selectedRowKeys:any, selectedRows:any)=>{
    setSelectedRowKeys([...selectedRowKeys]);
    setSelectedRows([...selectedRows]);
    console.log(selectedRowKeys, selectedRows);
  };
    // 全选的方法
 const selectAll =()=>{
  // 若已经是全选状态,当再次点击全选按钮的时候,则就执行取消全选操作;
  // 若不是全选状态,点击全选按钮的时候,就执行全选操作
   if(newData.length===selectedRows.length){
     handleChange([],[]);
   } else {
    newData.forEach((v,i)=>{
      if(selectedRows.indexOf(v)===-1){
        selectedRowKeys.push(String(i));
      }
     })
    handleChange(selectedRowKeys,[...newData]);
   }
};

const rowSelection :any= {
  selectedRowKeys,
  hideSelectAll: 'true',
  onChange: handleChange,
  getCheckboxProps: (record: DataType) => ({
    disabled: record.name === 'Disabled User', 
    // name: record.name,
  }),
};
  return (
    <div>
      <h1 className={styles.title}>Page index</h1>
      <Button type="primary" onClick={selectAll} >全选</Button>
      <Table
        rowSelection={rowSelection}
        columns={columns}
        dataSource={data}
      />
    </div>
  );
}

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Ant Design 的 Table 组件提供了一个 `rowSelection` 属性,用于选择行。如果要在 Table 组件实现全选,可以通过以下步骤实现: 1. 在 Table 组件部创建一个复选框,用于全选/取消全选。 2. 在复选框的 `onChange` 事件中,通过 Table 组件的 `rowSelection` 属性的 `onChange` 方法来处理全选/取消全选的逻辑。 以下是一个简单的示例代码: ``` import React, { useState } from 'react'; import { Table } from 'antd'; function MyTable(props) { const [selectedRowKeys, setSelectedRowKeys] = useState([]); const handleSelectAll = (e) => { const isChecked = e.target.checked; const keys = props.dataSource.map((item) => item.key); setSelectedRowKeys(isChecked ? keys : []); }; const rowSelection = { selectedRowKeys, onChange: (selectedRowKeys) => { setSelectedRowKeys(selectedRowKeys); }, }; const columns = [ { title: 'Name', dataIndex: 'name', }, { title: 'Age', dataIndex: 'age', }, { title: 'Address', dataIndex: 'address', }, ]; return ( <> <div style={{ marginBottom: '16px' }}> <input type="checkbox" onChange={handleSelectAll} /> <span style={{ marginLeft: '8px' }}>Select All</span> </div> <Table dataSource={props.dataSource} columns={columns} rowSelection={rowSelection} /> </> ); } export default MyTable; ``` 在上面的代码中,我们在 Table 组件部创建了一个复选框,并在 `handleSelectAll` 方法中处理全选/取消全选的逻辑。在 `rowSelection` 属性中,我们将 `selectedRowKeys` 和 `onChange` 方法传递给了 Table 组件,用于处理行选择的逻辑。通过这种方式,我们就可以在 Table 组件实现全选/取消全选的功能了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值