[====== Development ======]/React
[React] Meterial UI - Nested List Items
Ben777
2022. 8. 10. 13:22
반응형
Material demo (forked) - CodeSandbox
https://github.com/mui-org/material-ui/blob/master/docs/src/pages/components/lists/NestedList.js
codesandbox.io
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import ListSubheader from "@material-ui/core/ListSubheader";
import List from "@material-ui/core/List";
import ListItem from "@material-ui/core/ListItem";
import ListItemIcon from "@material-ui/core/ListItemIcon";
import ListItemText from "@material-ui/core/ListItemText";
import Collapse from "@material-ui/core/Collapse";
import InboxIcon from "@material-ui/icons/MoveToInbox";
import DraftsIcon from "@material-ui/icons/Drafts";
import SendIcon from "@material-ui/icons/Send";
import ExpandLess from "@material-ui/icons/ExpandLess";
import ExpandMore from "@material-ui/icons/ExpandMore";
import StarBorder from "@material-ui/icons/StarBorder";
const useStyles = makeStyles((theme) => ({
root: {
width: "100%",
maxWidth: 360,
backgroundColor: theme.palette.background.paper
},
nested: {
paddingLeft: theme.spacing(4)
},
nestedSecondLevel: {
paddingLeft: theme.spacing(8)
}
}));
export default function NestedList() {
const classes = useStyles();
const [open, setOpen] = React.useState(true);
const [openSecondLevel, setOpenSecondLevel] = React.useState(true);
const handleClick = () => {
setOpen(!open);
};
const handleClickSecondLevel = () => {
setOpenSecondLevel(!openSecondLevel);
};
return (
<List
component="nav"
aria-labelledby="nested-list-subheader"
subheader={
<ListSubheader component="div" id="nested-list-subheader">
Nested List Items
</ListSubheader>
}
className={classes.root}
>
<ListItem button>
<ListItemIcon>
<SendIcon />
</ListItemIcon>
<ListItemText primary="Sent mail" />
</ListItem>
<ListItem button>
<ListItemIcon>
<DraftsIcon />
</ListItemIcon>
<ListItemText primary="Drafts" />
</ListItem>
<ListItem button onClick={handleClick}>
<ListItemIcon>
<InboxIcon />
</ListItemIcon>
<ListItemText primary="Report" />
{open ? <ExpandLess /> : <ExpandMore />}
</ListItem>
<Collapse in={open} timeout="auto" unmountOnExit>
<List component="div" disablePadding>
<ListItem
button
className={classes.nested}
onClick={handleClickSecondLevel}
>
<ListItemIcon>
<StarBorder />
</ListItemIcon>
<ListItemText primary="My Report" />
{openSecondLevel ? <ExpandLess /> : <ExpandMore />}
</ListItem>
<Collapse in={openSecondLevel} timeout="auto" unmountOnExit>
<List component="div" disablePadding>
<ListItem button className={classes.nestedSecondLevel}>
<ListItemIcon>
<StarBorder />
</ListItemIcon>
<ListItemText primary="MIS Report" />
</ListItem>
</List>
</Collapse>
</List>
<List component="div" disablePadding>
<ListItem button className={classes.nested}>
<ListItemIcon>
<StarBorder />
</ListItemIcon>
<ListItemText primary="My Report2" />
</ListItem>
</List>
</Collapse>
</List>
);
}
반응형