1. ホーム
  2. reactjs

[解決済み] Material-UIを使用してAppbarの下にドロップダウンメニューを開くには?

2023-05-07 06:36:01

質問

私はMaterial-UIの初心者で、ちょうど彼らの メニュー付きアプリ バーの例 . メニューのドロップダウンをトグルするとき、それはAppbar自体の上に開きますが、私はそれがNavbarの下に開くことを望んでいます。

ドキュメントから、私は、これは次のようにして行うことができると理解しています。 anchorEl のように説明されています。 ここで . しかし、これを私の menu コンポーネントに実装しても何も起こりません。これを処理するための正しいマテリアル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 .

アンカー要素のプロパティを設定するために状態を使用するときにこれをどのように行うかは不明ですが、多分これで始めることができます。