我对Material UI不太熟悉,刚开始摆弄他们的App bar with Menu example.切换菜单下拉菜单时,它会在应用程序栏上方打开,而我希望它在导航栏下方打开.

从文档中,我了解到这可以用anchorEl来完成,正如here所解释的那样.但当我把这个应用到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>
    );
  }
}

推荐答案

我有一个类似的问题,我的工作方式是通过设置菜单本身的属性,如下所示:

  <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}
  >

为了让垂直属性发挥作用,我必须输入getContentAnchorEl={null},这是我最终从本期https://github.com/mui-org/material-ui/issues/7961中学到的.

不确定在使用状态设置锚元素的属性时如何执行此操作,但这可能会帮助您开始.

Reactjs相关问答推荐

删除表2的收件箱未按预期工作

URL参数和React路由中的点

无法在列表中看到文本

sourceBuffer. appendBuffer成功,但h5视频播放器卡住了

Reaction Axios多部分/表单-数据数组不工作

App.js中的H2组件不会动态呈现.这可能是什么问题?

无法在主组件的返回语句中呈现预期组件

REACTION-Easy-SORT返回.map错误

自定义变量默认、聚焦和填充时所需TextField中标签的星号 colored颜色

根据处于react 状态的数组的名称键,将新对象添加到嵌套的对象数组中

在任何渲染之前在ReactJs中获取数据

找不到名称setCometChat

在React中使用if条件时如何更改Tailwind中元素的文本 colored颜色

React-router-dom的链接不改变路由(ReactRouter6)

从ReactDataGridtry 将数据传递给父组件

如何在 React.js 中提取 PDF 的内容?

使用状态与复选框不同步

哪个是创建 React 应用程序的更好方法?

使用 useRef(uuid()) 的目的是什么?

单击当前子div时如何更改p标签的图像和样式?react