Tua*_* Le 7 accordion typescript reactjs material-ui
我想根据手风琴是否展开来更改图标。
我在Material ui页面上看到CSS具有.Mui-expanded,它可以查看expanded={true}或false,但是当expanded为true或false时,如何使用它来设置不同的图标。
所以我想如果expand为true则设置IconA,如果expand为false则设置IconB。
expandIcon={<IconA/>}
Run Code Online (Sandbox Code Playgroud)
Mur*_*ati 13
您可以使用组件expandIcon
可用的 prop AccordionSummary
。设置条件如下:expandIcon={expanded === 'panel1'?<ExpandMoreIcon />:<Minimize/>}
<Accordion expanded={expanded === 'panel1'} onChange={handleChange('panel1')}>
<AccordionSummary
expandIcon={expanded === 'panel1'?<ExpandMoreIcon />:<Minimize/>}
aria-controls="panel1bh-content"
id="panel1bh-header"
>
<Typography className={classes.heading}>General settings</Typography>
<Typography className={classes.secondaryHeading}>I am an accordion</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Nulla facilisi. Phasellus sollicitudin nulla et quam mattis feugiat. Aliquam eget
maximus est, id dignissim quam.
</Typography>
</AccordionDetails>
</Accordion>
Run Code Online (Sandbox Code Playgroud)
此示例代码取自文档: https: //material-ui.com/components/accordion/#control-accordion
上面提到的解决方案/sf/answers/4458391941/绝对正确,但缺点是useState
当手风琴折叠/展开时必须使用钩子来显示不同的图标。然而,这使得在主题中全局指定自定义 ExpandIcon 变得困难(不可能?)。因此,我认为 Mui 应该将扩展状态传递给expandIcon
prop。有一个针对此https://github.com/mui/material-ui/issues/18326的功能请求,但尚未实现。作为上述解决方案的解决方法和替代方案,其优点是可以在全局主题中使用,可以通过这种方式提供自定义图标:
const CustomExpandIcon = () => {
return (
<Box
sx={{
'.Mui-expanded & > .collapsIconWrapper': {
display: 'none',
},
'.expandIconWrapper': {
display: 'none',
},
'.Mui-expanded & > .expandIconWrapper': {
display: 'block',
},
}}
>
<div className="expandIconWrapper">
<MinusIcon />
</div>
<div className="collapsIconWrapper">
<PlusIcon />
</div>
</Box>
)
}
Run Code Online (Sandbox Code Playgroud)
请参阅:https://codesandbox.io/s/basicaccordion-material-demo-forked-2916o
归档时间: |
|
查看次数: |
25086 次 |
最近记录: |