reactjs - React MUI 菜单不关闭

标签 reactjs material-ui

我正在对 React Material 进行一些练习,但我遇到了菜单问题。

奇怪的是我有两个 IconButton 组件, 如果我将设置 anchor 元素的 onClick 放在第一个 IconButton 上,一切正常。

如果我将设置 anchor 元素的 onClick 放在第二个 IconButton 上,菜单将永远不会关闭..

为什么会这样?以及如何解决? 这是代码:

import React from 'react';
import AppBar from '@mui/material/AppBar';
import Toolbar from '@mui/material/Toolbar';
import Avatar from '@mui/material/Avatar';
import Menu from '@mui/material/Menu';
import MenuItem from '@mui/material/MenuItem';

import IconButton from '@mui/material/IconButton';

import MenuIcon from '@mui/icons-material/Menu';
import AccountIcon from '@mui/icons-material/AccountCircle';

function TopComp(props) {
  const [anchorEl, setAnchorEl] = React.useState(null);
  const isMenuOpen = Boolean(anchorEl);

  const handleMenuClick = (event) => {
    setAnchorEl(event.currentTarget);
  };

  const handleMenuClose = () => {
    setAnchorEl(null);
  };

  return (
    <div style={{ marginBottom: '30px' }}>
      <AppBar position="static" color="primary">
        <Toolbar>
          <IconButton
            size="large"
            edge="start"
            color="inherit"
            aria-label="menu"
            sx={{ mr: 2 }}
            //onClick={(event) => handleMenuClick(event)}
          >
            <MenuIcon />
          </IconButton>

          <div style={{ marginLeft: 'auto' }}>
            <IconButton
              size="large"
              edge="end"
              color="inherit"
              aria-label="menu"
              sx={{ mr: 2 }}
              onClick={(event) => handleMenuClick(event)}
            >
              <Menu
                id="basic-menu"
                anchorEl={anchorEl}
                open={isMenuOpen}
                onClose={handleMenuClose}
              >
                <MenuItem onClick={handleMenuClose}>Profile</MenuItem>
                <MenuItem onClick={handleMenuClose}>My account</MenuItem>
                <MenuItem onClick={handleMenuClose}>Logout</MenuItem>
              </Menu>
              <Avatar>
                <AccountIcon />
              </Avatar>
            </IconButton>
          </div>
        </Toolbar>
      </AppBar>
    </div>
  );
}

export default TopComp;

最佳答案

将您的 Menu 组件放在 IconButton 之外:-

import React from 'react';
import AppBar from '@mui/material/AppBar';
import Toolbar from '@mui/material/Toolbar';
import Avatar from '@mui/material/Avatar';
import Menu from '@mui/material/Menu';
import MenuItem from '@mui/material/MenuItem';

import IconButton from '@mui/material/IconButton';

import MenuIcon from '@mui/icons-material/Menu';
import AccountIcon from '@mui/icons-material/AccountCircle';

function TopComp(props) {
  const [anchorEl, setAnchorEl] = React.useState(null);
  const isMenuOpen = Boolean(anchorEl);

  const handleMenuClick = (event) => {
    setAnchorEl(event.currentTarget);
  };

  const handleMenuClose = () => {
    setAnchorEl(null);
  };

  return (
    <div style={{ marginBottom: '30px' }}>
      <AppBar position="static" color="primary">
        <Toolbar>
          <IconButton
            size="large"
            edge="start"
            color="inherit"
            aria-label="menu"
            sx={{ mr: 2 }}
            onClick={(event) => handleMenuClick(event)}
          >
            <MenuIcon />
          </IconButton>

          <Menu
            id="basic-menu"
            anchorEl={anchorEl}
            open={isMenuOpen}
            onClose={handleMenuClose}
           >
             <MenuItem onClick={handleMenuClose}>Profile</MenuItem>
             <MenuItem onClick={handleMenuClose}>My account</MenuItem>
             <MenuItem onClick={handleMenuClose}>Logout</MenuItem>
          </Menu>

          <div style={{ marginLeft: 'auto' }}>
            <IconButton
              size="large"
              edge="end"
              color="inherit"
              aria-label="menu"
              sx={{ mr: 2 }}
              onClick={(event) => handleMenuClick(event)}
            >
              <Avatar>
                <AccountIcon />
              </Avatar>
            </IconButton>
          </div>
        </Toolbar>
      </AppBar>
    </div>
  );
}

export default TopComp;

On codesandbox.io

关于reactjs - React MUI 菜单不关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70644145/

相关文章:

javascript - this.setState() 无法正常处理绑定(bind)事件

reactjs - 类型 'Element[]' 缺少类型 'Element' : type, props、key 中的以下属性

javascript - React 如何更新他的状态?

reactjs - Xamarin ReactJS WebView 导航

javascript - React 应用程序 - 在 Material UI Table 中加载选定的数组而不进行渲染检查

javascript - React JS 和material-ui 错误

javascript - 使用 axios 表达 promisify

javascript - 将 Material UI Typography 更改为样式组件

javascript - 使用按钮 reactjs 映射列表时出现“此”问题

reactjs - 如何在 React 上使用 Material-UI 更改选定的表格行背景