Reputation: 2863
In my simple Dialog component, I'm using React state to toggle between two views:
const SignInDialog = (props) => {
const {
classes, pageURL, handleClose, open, setOpen
} = props;
const [displaySignIn, setDisplaySignIn] = useState('inherit');
const [displaySignUp, setDisplaySignUp] = useState('none');
const toggleSignUp = () => {
setDisplaySignIn('none');
setDisplaySignUp('inherit');
};
const toggleSignIn = () => {
setDisplaySignUp('none');
setDisplaySignIn('inherit');
};
return (
<Dialog
maxWidth="xs"
open={open}
onClose={handleClose}
aria-labelledby="alert-dialog-title"
aria-describedby="alert-dialog-description"
>
<DialogTitle id="alert-dialog-title" className={classes.dialogTitle}>Sign in</DialogTitle>
<DialogContent component="div" display={displaySignIn}>
<DialogContentText>
SIGN IN
<Button color="inherit" onClick={toggleSignUp}>Sign up</Button>
</DialogContentText>
</DialogContent>
<DialogContent component="div" display={displaySignUp}>
<DialogContentText>
SIGN UP
<Button color="inherit" onClick={toggleSignIn}>Sign in</Button>
</DialogContentText>
</DialogContent>
</Dialog>
);
};
As can be seen, the idea is to show only the SIGN IN
element upon load. In this view, there's a button clicking which should toggle in the SIGN UP
view. However, when run, the code shows both elements in the browser. The SIGN-UP
block which should be hidden shows up despite the display
property being set to "none"
:
<div class="MuiDialogContent-root" component="div" display="inherit">...</div>
<div class="MuiDialogContent-root" component="div" display="none">...</div>
Shouldn't the second <div>
block be hidden instead?
Upvotes: 0
Views: 617
Reputation: 8774
DialogContent does not have a prop display. That is why you see both, because it is just ignored. You should change displaySignIn and displaySignUp to be a boolean and use a ternary operator like this:
{displaySignIn && <DialogContent component="div">
<DialogContentText>
SIGN IN
<Button color="inherit" onClick={toggleSignUp}>Sign up</Button>
</DialogContentText>
</DialogContent>}
{displaySignUp && <DialogContent component="div">
<DialogContentText>
SIGN UP
<Button color="inherit" onClick={toggleSignIn}>Sign in</Button>
</DialogContentText>
</DialogContent>}
To toggle between these two states.
Upvotes: 2