【问题标题】:How to create a table with multiple rows in one row (Material-UI/CSS)如何创建一行多行的表格(Material-UI/CSS)
【发布时间】:2019-12-10 14:16:21
【问题描述】:

我有这样的数组:

const sample = [
  { name: 'apple', detail: [{'a', 'b'}]},
  { name: 'banana', detail: [{'a', 'b'}]},
];

假设我要创建一个类似于以下附件的表格:

那是表体部分,我把所有的细节都放在里面了。它正在按我的预期创建表格,但尺寸确实很窄,并且与表头不匹配。

我想知道是否有一种聪明的方法可以在一行中映射多个数据并嵌入到一个表格单元格中。

名称部分(苹果和香蕉)必须是第一个具有行跨度的表格单元格。

【问题讨论】:

    标签: css reactjs user-interface html-table material-ui


    【解决方案1】:

    您可以在 TableCell 上使用 rowSpan。只需给它赋值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>
      );
    }
    

    这是一个Working Sample CodeSandbox 演示供您参考。

    【讨论】:

    • 如果有 w 行只有一个项目而不是很多行,就会出现问题...显示一个空格
    猜你喜欢
    • 2020-12-06
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 2018-12-06
    • 2016-05-05
    • 2021-02-06
    • 2021-11-20
    • 2010-11-18
    相关资源
    最近更新 更多