我有一组数据,将用于创建手风琴,我希望只有一个手风琴可以同时展开(例如,如果用户展开手风琴#1,然后展开#2,#1将不再展开)
我有以下代码:
const MyAccordion = props => {
const [expanded, setExpanded] = React.useState()
const handleChange = panel => (_, isExpanded) => {setExpanded(isExpanded ? panel : false)}
const classes = styles //?
let accordionInfo = createAccordionInfo(props.propthing);
return (
<Accordion
key={accordionInfo.uid}
onChange={handleChange(accordionInfo.uid)}
expanded={expanded === accordionInfo.uid}
TransitionProps={{unmountOnExit: true}}
className={classes.accordion}
>
<AccordionSummary expandIcon={<ExpandMoreIcon />} aria-controls={`${accordionInfo.uid}-content`} id={`${accordionInfo.uid}-header`}>
<Typography>Accordion Summary</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>Accordion Details</Typography>
</AccordionDetails>
</Accordion>
)
}
const MyAccordions = props => {
const [expanded, setExpanded] = React.useState()
const handleChange = panel => (_, isExpanded) => {setExpanded(isExpanded ? panel : false)}
return (
<div className={styles.root}>
{accordions.map(accordion => (
<MyAccordion onChange={handleChange} propthing={accordion} />
))}
</div>
)
}
我对 React 还比较陌生,所以我怀疑我的状态设置有误。如有任何帮助或建议,将不胜感激!谢谢
isExpanded
的值代表什么,所以它必须是手风琴所说的应该是什么,而不是它本来的样子。我猜你可以用null
代替false
,但由于它们都是假值,所以仍然可以工作。对我可能造成的任何困惑表示抱歉。 - Drew ReeseshouldExpand
这样的名称可能会使含义更加清晰。祝好运。 - Drew Reese