en-US
This example shows how to implement expanding rows.
zh-CN
该示例展示了如何实现展开行。
import React from 'react';
import { useImmer } from '@react-devui/hooks';
import { DTable, DButton, DSeparator } from '@react-devui/ui';
const list = Array.from({ length: 3 }).map((_, i) => ({
name: `Name ${i + 1}`,
age: `2${i}`,
address: `Room 100${i}, Building 2, Fandou Garden, Fandou Street`,
}));
export default function Demo() {
const [expand, setExpand] = useImmer(new Set());
return (
<DTable>
<table>
<thead>
<tr>
<DTable.Th dWidth={60}></DTable.Th>
<DTable.Th>Name</DTable.Th>
<DTable.Th>Age</DTable.Th>
<DTable.Th>Address</DTable.Th>
<DTable.Th>Action</DTable.Th>
</tr>
</thead>
<tbody>
{list.map((data) => (
<React.Fragment key={data.name}>
<tr>
<DTable.Td dWidth={60} dAlign="center">
<DTable.Expand
dExpand={expand.has(data.name)}
onExpandChange={(expand) => {
setExpand((draft) => {
if (expand) {
draft.add(data.name);
} else {
draft.delete(data.name);
}
});
}}
/>
</DTable.Td>
<DTable.Td>{data.name}</DTable.Td>
<DTable.Td>{data.age}</DTable.Td>
<DTable.Td>{data.address}</DTable.Td>
<DTable.Td dNowrap>
<DButton dType="link">Edit</DButton>
<DSeparator dVertical></DSeparator>
<DButton dType="link">Delete</DButton>
</DTable.Td>
</tr>
{expand.has(data.name) && (
<tr>
<td colSpan={5}>Some extra content...</td>
</tr>
)}
</React.Fragment>
))}
</tbody>
</table>
</DTable>
);
}