doo*_*ean 4 css user-interface html-table reactjs material-ui
我有这样的数组:
const sample = [
{ name: 'apple', detail: [{'a', 'b'}]},
{ name: 'banana', detail: [{'a', 'b'}]},
];
Run Code Online (Sandbox Code Playgroud)
假设我想创建一个类似于以下附件的表:
那是表的主体部分,我已经把所有的细节都放在了 . 它按照我的预期创建桌子,但尺寸非常窄,而且与桌子头也不匹配。
我想知道是否有一种智能方法可以将多个数据连续映射并嵌入到一个表格单元格中。
名称部分(苹果和香蕉)必须是第一个具有行跨度的表格单元格。
您可以在TableCell. 只需为其分配一个值detail.length + 1
在这里,试试这个:
import React, { Fragment } from "react";
import { makeStyles } from "@material-ui/core/styles";
import Table from "@material-ui/core/Table";
import TableBody from "@material-ui/core/TableBody";
import TableCell from "@material-ui/core/TableCell";
import TableHead from "@material-ui/core/TableHead";
import TableRow from "@material-ui/core/TableRow";
import Paper from "@material-ui/core/Paper";
const useStyles = makeStyles(theme => ({
root: {
width: "100%",
marginTop: theme.spacing(3),
overflowX: "auto"
},
table: {
minWidth: 700
}
}));
const sample = [
{ name: "apple", detail: ["a", "b", "c", "d"] },
{ name: "banana", detail: ["a", "b"] }
];
export default function SpanningTable() {
const classes = useStyles();
return (
<Paper className={classes.root}>
<Table className={classes.table}>
<TableHead>
<TableRow>
<TableCell>Fruit</TableCell>
<TableCell align="right">Buyers</TableCell>
</TableRow>
</TableHead>
<TableBody>
{sample.map(item => (
<Fragment>
<TableRow>
<TableCell rowSpan={item.detail.length + 1}>
{item.name}
</TableCell>
</TableRow>
{item.detail.map(detail => (
<TableRow>
<TableCell>{detail}</TableCell>
</TableRow>
))}
</Fragment>
))}
</TableBody>
</Table>
</Paper>
);
}
Run Code Online (Sandbox Code Playgroud)
这是供您参考的工作示例 CodeSandbox演示。