reactjs - 我的处理程序没有设置状态 - Material UI
问题描述
我正在使用 Material UI 中的组件“对话框”。
当我单击按钮关闭对话框(触发handleCLose
)时,它不会将状态设置为false
. 我在这里读到了一个类似的问题:OnClick Listeners not working after close full-screen dialog using react-material-ui
但到目前为止我还没有设法保存它。
const Transition = React.forwardRef(function Transition(props, ref) {
return <Slide direction="up" ref={ref} {...props} />;
});
function Information() {
const [open, setOpen] = React.useState(false);
const handleClickOpen = () => {
setOpen(true);
};
const handleClose = () => {
setOpen(false);
console.log(open)
};
return (
<div onClick={()=>handleClickOpen()}>
Information
<Dialog
open={open}
TransitionComponent={Transition}
keepMounted
onClose={handleClose}
aria-labelledby="alert-dialog-slide-title"
aria-describedby="alert-dialog-slide-description"
>
<DialogTitle id="alert-dialog-slide-title">{"Information"}</DialogTitle>
<DialogContent>
<DialogContentText id="alert-dialog-slide-description">
Blablabla
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} color="primary"> // The function is here
Close
</Button>
</DialogActions>
</Dialog>
</div>
);
}
export default Information
解决方案
看起来您已经将对话框包装在一个div
带有onClick
将对话框设置为打开的函数中。发生的事情是onClick
每当您在对话框内单击时都会调用它。因此,即使您单击关闭按钮,它也会调用handleClickOpen
. 尝试将它们分开:
return (
<> // Add wrapping fragment
<div onClick={()=>handleClickOpen()}>
Information
</div> // close div here
<Dialog
open={open}
TransitionComponent={Transition}
keepMounted
onClose={handleClose}
aria-labelledby="alert-dialog-slide-title"
aria-describedby="alert-dialog-slide-description"
>
<DialogTitle id="alert-dialog-slide-title">{"Information"}</DialogTitle>
<DialogContent>
<DialogContentText id="alert-dialog-slide-description">
Blablabla
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} color="primary">
Close
</Button>
</DialogActions>
</Dialog>
</>
);
}
推荐阅读
- python - 获取函数的源文件行号
- angular - 什么是 ViewChild
- ruby-on-rails - 如何猴子补丁 ActiveRecord::QueryMethods?
- react-native - 反应原生:TextInput 中的竞争条件
- javascript - 如何在 JavaScript 中将 GET 请求传递给 window.location?
- java - java.io.Exception com.android.okhttp 上的流意外结束
- javascript - 无法安装 leveldown npm 包,node-gyp 错误 MSBuild.exe 失败,退出代码:1
- java - 如何在java中将csv转换为嵌套的Json?
- java - 在 Spring Boot 项目中将实体到 DTO 转换放在哪里?
- r - 动态连接多个表