为什么在MenuAppBar默认选择第一个菜单项

时间:2017-12-19 13:51:50

标签: reactjs material-ui

在此menuAppBar中,默认情况下会选择菜单中的第一项。在menu中,默认情况下未选择第一个项目,并且我想要的内容与manuAppBar菜单中的相同。

1 个答案:

答案 0 :(得分:2)

第一个示例使用material-ui Menu component实现,第二个示例使用react-popper库中的组件实现。

在第一个示例中,第一个项目突出显示,因为它具有焦点。这是因为如果在安装或更新时打开菜单,则会设置焦点。看看the source

class Menu extends React.Component {
  componentDidMount() {
    if (this.props.open) {
      this.focus();
    }
  }

  componentDidUpdate(prevProps) {
    if (!prevProps.open && this.props.open) {
      // Needs to refocus as when a menu is rendered into another Modal,
      // the first modal might change the focus to prevent any leak.
      this.focus();
    }
  }

如果您更喜欢react-popper并希望在AppBar中使用它,您可以:

<AppBar position="static">
  <Toolbar>
    <IconButton className={classes.menuButton} color="contrast" aria-label="Menu">
      <MenuIcon />
    </IconButton>
    <Typography type="title" color="inherit" className={classes.flex}>
      Title
    </Typography>
    {auth && (
      <Manager>
        <Target>
          <IconButton
            aria-owns={open ? 'menu-list' : null}
            aria-haspopup="true"
            onClick={this.handleMenu}
            color="contrast"
          >
            <AccountCircle />
          </IconButton>
        </Target>
        <Popper
          placement="top-right"
          eventsEnabled={open}
          className={classNames({ [classes.popperClose]: !open })}
        >
          <ClickAwayListener onClickAway={this.handleClose}>
            <Grow in={open} id="menu-list" style={{ transformOrigin: '0 0 0' }}>
              <Paper>
                <MenuList role="menu">
                  <MenuItem onClick={this.handleClose}>Profile</MenuItem>
                  <MenuItem onClick={this.handleClose}>My account</MenuItem>
                  <MenuItem onClick={this.handleClose}>Logout</MenuItem>
                </MenuList>
              </Paper>
            </Grow>
          </ClickAwayListener>
        </Popper>
      </Manager>
    )}
  </Toolbar>
</AppBar>

以下是codesandbox中两个引用示例的混搭。它需要工作,并且仅在此处添加以说明react-popper的可能性。