方法1: Expansion Panelを使用した折りたたみテーブル
import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import {
Table,
TableBody,
TableCell,
TableContainer,
TableHead,
TableRow,
Paper,
ExpansionPanel,
ExpansionPanelSummary,
ExpansionPanelDetails,
} from '@material-ui/core';
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
const useStyles = makeStyles((theme) => ({
root: {
width: '100%',
},
table: {
minWidth: 650,
},
expansionPanel: {
marginBottom: theme.spacing(1),
},
}));
const CollapsibleTable = () => {
const classes = useStyles();
return (
<TableContainer component={Paper} className={classes.root}>
<Table className={classes.table} aria-label="collapsible table">
<TableHead>
<TableRow>
<TableCell />
<TableCell>Column 1</TableCell>
<TableCell>Column 2</TableCell>
<TableCell>Column 3</TableCell>
</TableRow>
</TableHead>
<TableBody>
{data.map((row) => (
<TableRow key={row.id}>
<TableCell>
<ExpansionPanel className={classes.expansionPanel}>
<ExpansionPanelSummary
expandIcon={<ExpandMoreIcon />}
aria-controls="panel1a-content"
id="panel1a-header"
>
{/* 行を折りたたむためのコンテンツ */}
</ExpansionPanelSummary>
<ExpansionPanelDetails>
{/* 行が展開されたときに表示されるコンテンツ */}
</ExpansionPanelDetails>
</ExpansionPanel>
</TableCell>
<TableCell>{row.column1}</TableCell>
<TableCell>{row.column2}</TableCell>
<TableCell>{row.column3}</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</TableContainer>
);
};
export default CollapsibleTable;
方法2: Collapseコンポーネントを使用した折りたたみテーブル
import React, { useState } from 'react';
import { makeStyles } from '@material-ui/core/styles';
import {
Table,
TableBody,
TableCell,
TableContainer,
TableHead,
TableRow,
Paper,
Collapse,
} from '@material-ui/core';
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
const useStyles = makeStyles((theme) => ({
root: {
width: '100%',
},
table: {
minWidth: 650,
},
}));
const CollapsibleTable = () => {
const classes = useStyles();
const [open, setOpen] = useState(false);
const handleRowClick = () => {
setOpen(!open);
};
return (
<TableContainer component={Paper} className={classes.root}>
<Table className={classes.table} aria-label="collapsible table">
<TableHead>
<TableRow>
<TableCell />
<TableCell>Column 1</TableCell>
<TableCell>Column 2</TableCell>
<TableCell>Column 3</TableCell>
</TableRow>
</TableHead>
<TableBody>
{data.map((row) => (
<React.Fragment key={row.id}>
<TableRow onClick={handleRowClick}>
<TableCell>
<ExpandMoreIcon
style={{ transform: open ? 'rotate(180deg)' : 'none' }}
/>
</TableCell>
<TableCell>{row.column1}</TableCell>
<TableCell>{row.column2}</TableCell>
<TableCell>{row.column3}</TableCell>
</TableRow>
<TableRow>
<TableCell style={{ paddingBottom: 0, paddingTop: 0 }} colSpan={4}>
<Collapse in={open} timeout="auto" unmountOnExit>
{/* 行が展開されたときに表示されるコンテンツ */}
</Collapse>
</TableCell>
以上のコード例では、Material-UIを使用して折りたたみ可能なテーブルを作成する方法を示しています。方法1では、Expansion Panelコンポーネントを使用して各行を折りたたむことができます。方法2では、Collapseコンポーネントを使用して各行を折りたたむことができます。
実際のテーブルデータを表示するために、適切なデータソースを用意し、`data`配列にマップする必要があります。また、必要に応じてスタイルやデザインをカスタマイズすることもできます。
これらの方法を使用することで、Material-UIを介して折りたたみ可能なテーブルを簡単に実装することができます。