react hooks 和antd 两个table表格,一个表格有的信息,另一个表格里不可选中,可以写一个demo吗
时间: 2024-03-27 16:36:41 浏览: 175
当然可以,以下是一个简单的例子:
```jsx
import React, { useState } from "react";
import { Table } from "antd";
const data = [
{
key: "1",
name: "John Brown",
age: 32,
address: "New York No. 1 Lake Park",
selected: false
},
{
key: "2",
name: "Jim Green",
age: 42,
address: "London No. 1 Lake Park",
selected: false
},
{
key: "3",
name: "Joe Black",
age: 32,
address: "Sidney No. 1 Lake Park",
selected: false
}
];
const TableWithSelection = ({ dataSource, onSelect }) => {
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
const handleSelectChange = (selectedRowKeys, selectedRows) => {
setSelectedRowKeys(selectedRowKeys);
if (onSelect) {
onSelect(selectedRowKeys, selectedRows);
}
};
const rowSelection = {
selectedRowKeys,
onChange: handleSelectChange,
getCheckboxProps: record => ({
disabled: record.selected
})
};
const columns = [
{
title: "Name",
dataIndex: "name"
},
{
title: "Age",
dataIndex: "age"
},
{
title: "Address",
dataIndex: "address"
}
];
return (
<Table
dataSource={dataSource}
columns={columns}
rowSelection={rowSelection}
/>
);
};
const App = () => {
const [dataWithSelection, setDataWithSelection] = useState(
data.map(d => ({ ...d }))
);
const handleSelect = (selectedRowKeys, selectedRows) => {
setDataWithSelection(
dataWithSelection.map(d => {
if (selectedRowKeys.includes(d.key)) {
return {
...d,
selected: true
};
} else {
return {
...d,
selected: false
};
}
})
);
};
return (
<div>
<h2>Table with Selection</h2>
<TableWithSelection dataSource={dataWithSelection} onSelect={handleSelect} />
<h2>Table without Selection</h2>
<Table dataSource={data} columns={columns} />
</div>
);
};
export default App;
```
在这个例子中,我们创建了一个 `TableWithSelection` 组件,它接收一个 `dataSource` 属性和一个 `onSelect` 属性,用于在表格中选择行时更新数据。我们使用 `useState` 钩子来跟踪选定的行,并在每次选择发生变化时调用 `onSelect` 回调函数。
我们还定义了 `rowSelection` 对象,其中的 `getCheckboxProps` 方法用于禁用 `selected` 属性为 `true` 的行的复选框。这样,我们就可以防止在表格中选择已选择的行。最后,我们将 `dataSource`、`columns` 和 `rowSelection` 传递给 `Table` 组件,以创建一个带有选择功能的表格。
在 `App` 组件中,我们使用 `useState` 钩子来跟踪带有选择功能的表格的数据,并在 `handleSelect` 回调函数中更新 `selected` 属性。我们还在页面上展示了一个不带选择功能的表格,以供比较。
阅读全文