Sean
Sean

Reputation: 1456

React Material UI Menu Not Closing

I cannot for the life of me get this menu to close once it is opened on the page. I've tried moving the icon button tags and everything.

const useStyles = makeStyles((theme) => ({
  root: {
    flexGrow: 1,
  },
  menuButton: {
    marginRight: theme.spacing(2),
  },
  title: {
    flexGrow: 1,
  },
}));

export default function ButtonAppBar() {
  const classes = useStyles();
  const [anchorEl, setAnchorEl] = React.useState(null);

  const handleClick = (event) => {
    setAnchorEl(event.currentTarget);
  };
  const handleClose = () => {
    setAnchorEl(null);
  };

  return (
    <div className={classes.root}>
      <AppBar position="static">
        <Toolbar>
          <Typography variant="h6" className={classes.title}>
            HPH
          </Typography>
          <IconButton edge="start"  onClick={handleClick} className={classes.menuButton} color="inherit" aria-label="menu">
          
            <MenuIcon />
            <Menu
            id="simple-menu"
            anchorEl={anchorEl}
            keepMounted
            open={Boolean(anchorEl)}
            onClose={handleClose}
          >
                <MenuItem button component={Link} to="/">
                    Home
                </MenuItem>
                <MenuItem button  component={Link} to="/search">
                    Search Pricing
                </MenuItem>
                <MenuItem button component={Link} to="/about">
                    About
                </MenuItem>
            </Menu>
            </IconButton>
        </Toolbar>
      </AppBar>
    </div>
  );
}

When I put the menu outside of the icon button tag, the icon no longer allows any click event.

Upvotes: 0

Views: 1815

Answers (1)

Someone Special
Someone Special

Reputation: 13588

You need to move the menu out of the button

export default function ButtonAppBar() {
  const classes = useStyles();
  const [anchorEl, setAnchorEl] = React.useState(null);

  const handleClick = (event) => {
    setAnchorEl(event.currentTarget);
  };
  const handleClose = () => {
    setAnchorEl(null);
  };

  return (
    <div className={classes.root}>
      <AppBar position="static">
        <Toolbar>
          <Typography variant="h6" className={classes.title}>
            HPH
          </Typography>
          <IconButton edge="start"  onClick={handleClick} className={classes.menuButton} color="inherit" aria-label="menu">
          
            <MenuIcon />
              </IconButton>
            <Menu
            id="simple-menu"
            anchorEl={anchorEl}
            keepMounted
            open={Boolean(anchorEl)}
            onClose={handleClose}
          >
                <MenuItem button component={Link} to="/">
                    Home
                </MenuItem>
                <MenuItem button  component={Link} to="/search">
                    Search Pricing
                </MenuItem>
                <MenuItem button component={Link} to="/about">
                    About
                </MenuItem>
            </Menu>
          
        </Toolbar>
      </AppBar>
    </div>
  );
}

See the simple menu example

Upvotes: 1

Related Questions