reactjs - 如何使用 Material UI 在应用栏下方打开下拉菜单?

标签 reactjs material-ui

我是 Material UI 新手,刚刚开始摆弄他们的 App bar with Menu example 。切换菜单下拉菜单时,它会在应用栏本身上方打开,而我希望它在导航栏下方打开。

从文档中,我了解到可以使用 anchorEl 来更改位置,如所述 in the Popover positioning guide 。但是当我将其实现到我的 menu 组件时,什么也没有发生。解决这个问题的“正确的 Material UI 方式”是什么?

class Header extends React.Component {
  state = {
    auth: true,
    anchorEl: null,
    anchorOriginVertical: 'bottom',
    anchorOriginHorizontal: 'right',
    transformOriginVertical: 'top',
    transformOriginHorizontal: 'right',
    anchorReference: 'anchorEl',
  };

  handleChange = (event, checked) => {
    this.setState({ auth: checked });
  };

  handleMenu = event => {
    this.setState({ anchorEl: event.currentTarget });
  };

  handleClose = () => {
    this.setState({ anchorEl: null });
  };

  render() {
    const { classes } = this.props;
    const { auth, anchorEl } = this.state;
    const open = Boolean(anchorEl);

    return (
      <div className={classes.root}>
        <AppBar position="static">
          <Toolbar>
            <Typography type="title" color="inherit" className={classes.flex}>
              Title
            </Typography>
            {auth && (
              <div>
                <IconButton
                  aria-owns={open ? 'menu-appbar' : null}
                  aria-haspopup="true"
                  onClick={this.handleMenu}
                  color="contrast"
                >
                  <AccountCircle />
                </IconButton>
                <Menu
                  id="menu-appbar"
                  anchorEl={anchorEl}
                  open={open}
                  onClose={this.handleClose}
                >
                  <MenuItem onClick={this.handleClose}>Profile</MenuItem>
                  <MenuItem onClick={this.handleClose}>My account</MenuItem>
                </Menu>
              </div>
            )}
          </Toolbar>
        </AppBar>
      </div>
    );
  }
}

最佳答案

我让它工作的方法是在菜单本身上设置 Prop ,如下所示:

  <Menu
    id="menu-appbar"
    anchorEl={anchorEl}
    getContentAnchorEl={null}
    anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}
    transformOrigin={{ vertical: 'top', horizontal: 'center' }}
    open={open}
    onClose={this.handleClose}
    className={props.classes.menu}
  >

定位 Prop (anchorOrigintransformOrigin)来自Popover组件,请参见演示:https://mui.com/material-ui/react-popover/#anchor-playground .

我还必须放入 getContentAnchorEl={null} 才能使垂直 Prop 发挥作用,我最终从这个问题中学到了这一点 https://github.com/mui/material-ui/issues/7961 .
编辑:getContentAnchorEl 属性已在 Material UI v5 中删除,不再需要。

不确定在使用状态设置 anchor 元素的属性时如何执行此操作,但这也许可以帮助您入门。

关于reactjs - 如何使用 Material UI 在应用栏下方打开下拉菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48157863/

相关文章:

javascript - Material-UI SimpleTable 事件处理

javascript - 动态 react 抽屉导航锁

reactjs - Clojurescript、Reagent : pass atoms down as inputs, 或用作全局变量?

node.js - 我如何在 gatsby-node.js 中使用多个 createPage 路由

javascript - React 子组件中的 props 更新延迟

css - 如何在 MUI 网格中有不同的水平和垂直间距?

reactjs - 如何在库组件和我的应用程序组件之间共享上下文?

javascript - this.props 'missing' 方法使用来自 react-redux 的连接

reactjs - Material-ui-next - 版式

javascript - 使用material-ui对话框组件突出显示背景元素