材料-UI:仅单击图标

问题描述 投票:0回答:7
代码:

import React from "react"; import ExpandMoreIcon from "@material-ui/icons/ExpandMore"; import Accordion from "@material-ui/core/Accordion"; import AccordionDetails from "@material-ui/core/AccordionDetails"; import Typography from "@material-ui/core/Typography"; import AccordionSummary from "@material-ui/core/AccordionSummary"; export default function App() { return ( <div style={{}}> <h4>How to create Accordion in ReactJS?</h4> <Accordion style={{ width: 400}}> <AccordionSummary expandIcon={<ExpandMoreIcon />} aria-controls="panel1a-content" > <div>Click to Expand</div> </AccordionSummary> <AccordionDetails> <Typography>Greetings of the day :)</Typography> </AccordionDetails> </Accordion> </div> ); }

没有公共API可以按照您想做的事件,但是您可以使用此
css reactjs material-ui accordion modern-ui
7个回答
15
投票

V5

<AccordionSummary sx={{ pointerEvents: "none" }} expandIcon={ <ExpandMoreIcon sx={{ pointerEvents: "auto" }} /> } >

V4

const useStyles = makeStyles({ summary: { pointerEvents: 'none', }, icon: { pointerEvents: 'auto', }, });

<AccordionSummary
  className={classes.summary}
  expandIcon={<ExpandMoreIcon className={classes.icon} />}
>
  <Typography>Accordion 1</Typography>
</AccordionSummary>
livedemo

Codesandbox Demo 是的,我们可以像这样做


15
投票
1-用处理程序创建自己的状态:

const [expand, setExpand] = React.useState(false); const toggleAcordion = () => { setExpand((prev) => !prev); };

2-将我们的状态添加到手风琴中:

<Accordion expanded={expand} style={{ width: 400 }}>

3-添加图标:

onClick

Full代码:

Edit:说明:物质-UI手风琴具有其自己的状态(开放或关闭)及其自己的点击处理程序,我们上面做的是我们创建了自己的状态,并由道具Codesandbox Demo <AccordionSummary expandIcon={<ExpandMoreIcon />} aria-controls="panel1a-content" IconButtonProps={{ onClick: toggleAcordion }} > 创建了自己的状态和覆盖物质 - UI手风琴状态并将事件侦听器添加到道具的图标按钮

expanded

中,我们的活动听众将通过更改状态打开或关闭手风琴。 注:

在光标指针的情况下,上面的代码不会更改样式。
    
为V5,并正确设置鼠标光标:

1-用处理程序创建自己的状态:

onClick


10
投票
2-将我们的状态添加到手风琴中,然后单击时切换:

IconButtonProps

这些解决方案中没有一个对我有用。我用
const [accordionOpen, setAccordionOpen] = React.useState(false);

方法处理了它,在调用切换函数后,在图标的<Accordion expanded={accordionOpen}> <AccordionSummary expandIcon={ <ExpandMoreIcon style={{ cursor: 'pointer' }} onClick={() => setAccordionOpen(!accordionOpen)} /> } sx={{ cursor: 'unset !important' }} >

事件中使用它。
就像以下:

2
投票

e.stopPropagation()

您可以尝试在手风琴中设置true/false集

onClick
import React from "react"; import ExpandMoreIcon from "@material-ui/icons/ExpandMore"; import Accordion from "@material-ui/core/Accordion"; import AccordionDetails from "@material-ui/core/AccordionDetails"; import Typography from "@material-ui/core/Typography"; import AccordionSummary from "@material-ui/core/AccordionSummary"; export default function App() { return ( <div style={{}}> <h4>How to create Accordion in ReactJS?</h4> <Accordion style={{ width: 400}}> <AccordionSummary expandIcon={<ExpandMoreIcon />} aria-controls="panel1a-content" > <div ><img src='yourIcon' onClick={(e) => { toggleAccordion(); e.stopPropagation() }} /></div> </AccordionSummary> <AccordionDetails> <Typography>Greetings of the day :)</Typography> </AccordionDetails> </Accordion> </div> ); }


1
投票

I使用手风琴(TS版本)中的Onchange属性以这种方式解决了它:

function Container(props) { const [expand, setExpand] = React.useState(false); const toggleAccordion = () => { setExpand((prev) => !prev); }; return ( <React.Fragment> <Accordion expanded={expand}> <AccordionSummary expandIcon={<ExpandMoreIcon onClick={toggleAccordion} />} aria-controls="panel1a-content" id="panel1a-header" > <Typography></Typography> </AccordionSummary> <AccordionDetails> </AccordionDetails> </Accordion> </React.Fragment>) }

对于我来说,它很棒。

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

0
投票

    

0
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.