antd中table内添加checkbox踩坑记录

table是一些管理系统经常需要使用的组件,如果想要在table中同时操作多项,可能需要在前面添加checkbox,今天在项目终于到一个坑,使用的是antd组件库,但是在按照官网的例子引入时,发现点击其中某一行的checkbox,会将所有行的checkbox同时选中

在查阅官方文档后,发现有一个selectedRowKeys属性,文档上说selectedRowKeys需要和onChange 进行配合进行配合使用,onChange方法有两个参数function(selectedRowKeys, selectedRows),第二个参数表示当前行的数据,第一表示的是数据中的key值,这个就很关键,如果你的数据中没有绑定key这个字段,那么这个参数输出的就是undefined,所有需要在数据中绑定一个唯一的key值,可以和数据中的id保持一直,具体代码:

const { selectedRowKeys } = this.state
const rowSelection = {
    selectedRowKeys,
    onChange:this.onSelectChange
}
<Table
     columns={this.state.columns}
     dataSource={this.state.auditCommonModelLists}
     rowSelection={rowSelection}
/>
onSelectChange = (selectedRowKeys, selectedRows) => {
        // console.log(selectedRowKeys, selectedRows)
        this.setState({selectedRowKeys})
}

 

可以通过antd的`Table`组件的`rowSelection`属性来实现多选和单选功能,并通过`selectedRowKeys`属性来获取当前选的行的key值。 具体实现步骤如下: 1. 在`<Table>`组件添加`rowSelection`属性,设置`type`为`checkbox`表示启用多选功能。 ``` <Table rowSelection={{ type: "checkbox", onChange: this.onSelectChange, selectedRowKeys: this.state.selectedRowKeys }} columns={columns} dataSource={data} /> ``` 2. 在`<Table>`组件添加`onChange`事件处理函数`onSelectChange`。 ``` onSelectChange = (selectedRowKeys, selectedRows) => { this.setState({ selectedRowKeys }); }; ``` 3. 在`render()`函数获取当前选行的key值。 ``` const { selectedRowKeys } = this.state; ``` 完整示例代码如下: ``` import React from "react"; import ReactDOM from "react-dom"; import { Table } from "antd"; const columns = [ { title: "Name", dataIndex: "name" }, { title: "Age", dataIndex: "age" }, { title: "Address", dataIndex: "address" } ]; const data = [ { key: "1", name: "John Brown", age: 32, address: "New York No. 1 Lake Park" }, { key: "2", name: "Jim Green", age: 42, address: "London No. 1 Lake Park" }, { key: "3", name: "Joe Black", age: 32, address: "Sidney No. 1 Lake Park" }, { key: "4", name: "Jim Red", age: 32, address: "London No. 2 Lake Park" } ]; class App extends React.Component { state = { selectedRowKeys: [] }; onSelectChange = (selectedRowKeys, selectedRows) => { this.setState({ selectedRowKeys }); }; render() { const { selectedRowKeys } = this.state; const rowSelection = { type: "checkbox", onChange: this.onSelectChange, selectedRowKeys }; return ( <Table rowSelection={rowSelection} columns={columns} dataSource={data} /> ); } } ReactDOM.render(<App />, document.getElementById("container")); ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值