Reactjs 材质UI-带复选框的扩展面板

Reactjs 材质UI-带复选框的扩展面板,reactjs,material-ui,Reactjs,Material Ui,我正在使用材质UI进行UI设计。 我正在使用一个集成了复选框的扩展面板 请查找下面的代码 {item.description} Lorem ipsum dolor sit amet,是一位杰出的献身者。 malesuada lacus ex的Suspendisse, 坐在艾米特·布兰迪特·利奥·洛博蒂斯·埃吉特旁边。 Lorem ipsum dolor sit amet,是一位杰出的献身者。 malesuada lacus ex的Suspendisse, 坐在艾米特·布兰迪特·利奥·洛博蒂斯·

我正在使用材质UI进行UI设计。 我正在使用一个集成了复选框的扩展面板

请查找下面的代码


{item.description}
Lorem ipsum dolor sit amet,是一位杰出的献身者。
malesuada lacus ex的Suspendisse,
坐在艾米特·布兰迪特·利奥·洛博蒂斯·埃吉特旁边。
Lorem ipsum dolor sit amet,是一位杰出的献身者。
malesuada lacus ex的Suspendisse,
坐在艾米特·布兰迪特·利奥·洛博蒂斯·埃吉特旁边。
但我面临一个问题,当我选中或取消选中复选框时,扩展面板会展开或折叠。我希望避免由于复选框而对扩展面板执行任何操作。 我怎样才能做到这一点


提前谢谢。

这不是你问题的直接答案。但通过使用以下代码,您只能通过图标打开/关闭扩展面板

<ExpansionPanelSummary expandIcon={<ExpandMoreIcon onClick={() => {
               this.setState({
                 expansionPanelOpen: !this.state.expansionPanelOpen
               });
             }}/>}>
               ....
}>
....

您只需停止传播事件:

function handleClickCheckbox(e) {
  e.stopPropagation();
  // do something
}

...

<Checkbox value="checkedB"
          color="primary"
          onClick={e => handleClickCheckbox(e)}
/>
函数handleClickCheckbox(e){
e、 停止传播();
//做点什么
}
...
handleClickCheckbox(e)}
/>

或者更简单地说:

<Checkbox value="checkedB"
          color="primary"
          onClick={e => {e.stopPropagation();}}
/>
{e.stopPropagation();}
/>

如果您无法停止传播,也可以在ExpansionPanelSummary.js的material ui源代码中注释掉整个面板中的onClick操作,并将其仅放置在按钮图标中

return React.createElement(ButtonBase, _extends({
    focusRipple: false,
    disableRipple: true,
    disabled: disabled,
    component: "div",
    "aria-expanded": expanded,
    className: clsx(classes.root, className, disabled && classes.disabled, expanded && classes.expanded, focusedState && classes.focused),
    onFocusVisible: handleFocusVisible,
    onBlur: handleBlur,
    //onClick: handleChange, This makes the entire expansion panel clickable
    ref: ref
  }, other), React.createElement("div", {
    className: clsx(classes.content, expanded && classes.expanded)
  }, children), expandIcon && React.createElement(IconButton, _extends({
    disabled: disabled,
    className: clsx(classes.expandIcon, expanded && classes.expanded),
    edge: "end",
    component: "div",
    onClick: handleChange, //put the onClick event here
    tabIndex: -1,
    "aria-hidden": true
  }, IconButtonProps), expandIcon));
});
对于版本:“@material ui/core”:“4.9.9”

如果仅将
onClick
添加到
expansionicon
中,则会丢失要单击的面板摘要的所有空间,此外,并非所有用户都会首先知道他们必须单击箭头图标才能展开面板,因此,最好将onClick事件添加到
ExpansionPanelSummary
,通过这样做,单击事件将不包括ExpansionPanelDetails,整个
ExpansionPanelSummary
可以在任何地方单击并展开/折叠其正常行为

<ExpansionPanel expanded={isExpanded}>
  <ExpansionPanelSummary expandIcon={<ExpandMore />} onClick={handleClickExpansion}>...</ExpansionPanelSummary>
  <ExpansionPanelDetails>....</ExpansionPanelDetails>
</ExpansionPanel>

...
....
const[expanded,setExpanded]=React.useState(false);
setExpanded(!expanded)}
/>
setExpanded(!expanded)}
>
单击打开
开放

似乎不是这样。。。?如果你确定,你能提供更多的细节吗?这实际上帮助了我。只需将
expanded
prop添加到
ExpansionPanel
组件中,并使用state boolTry值添加关于如何获得此解决方案的说明。
const [expanded, setExpanded] = React.useState(false);

<Checkbox 
      value="checked"
      color="primary"
      onClick={() => setExpanded(!expanded)}
 />
<ExpansionPanel expanded={expanded}>
                <ExpansionPanelSummary
                    expandIcon={<ExpandMoreIcon />}
                    onClick={() => setExpanded(!expanded)}
                >
                 ON CLICK OPEN
                </ExpansionPanelSummary>
                <ExpansionPanelDetails>
                  IS OPEN
                </ExpansionPanelDetails>
            </ExpansionPanel>