Reactjs 材质UI-带复选框的扩展面板
我正在使用材质UI进行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, 坐在艾米特·布兰迪特·利奥·洛博蒂斯·
{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>