Выпадающее меню React Material-UI не работает в Paper

Я скопировал инструкции по использованию Menus в документации Material-UI. У меня есть кнопка, отображаемая в моем компоненте контейнера, в котором есть компонент Paper, но когда я нажимаю на нее, меню не отображается. Вот код:

index.js - Компонент контейнера

const styles = theme => ({
  root: theme.mixins.gutters({
    paddingBottom: 16
  })
});

class ProvidersPage extends React.Component {
  constructor(props, context) {
    super(props, context);
  }

  render() {
    const { classes, providers } = this.props;

    return (
      <div>
        <Paper className = {classes.root} elevation = {4}>
          <ProviderList providers = {providers} />
        </Paper>
      </div>
    );
  }
}

ProvidersPage.propTypes = {
  classes: PropTypes.object.isRequired,
};

function mapStateToProps(state) {
  return {
    providers: state.providers
  };
}

export default connect(
  mapStateToProps
)(withStyles(styles)(ProvidersPage));

Компонент ProvidersList.js

const styles = theme => ({
  actions: {
    color: theme.palette.text.secondary,
  },
  title: {
    flex: '1',
  }
});

class ProviderList extends React.Component {
  constructor(props, context) {
    super(props, context);
  }

  render() {
    const { classes, providers } = this.props;

    return (
      <Fragment>
        <Toolbar disableGutters>
          <div className = {classes.title}>
            <Typography variant = "title">
              Providers
            </Typography>
          </div>
          <div className = {classes.actions}>
            <ProviderMenu />
          </div>
        </Toolbar>
      </Fragment>
    );
  }
};

ProviderList.propTypes = {
  classes: PropTypes.object.isRequired,
  providers: PropTypes.array.isRequired
};

export default withStyles(styles)(ProviderList);

ProviderMenu.js - Мой компонент меню, в котором есть меню

class ProviderMenu extends React.Component {
  state = {
    anchorEl: null,
  };

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

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

  render() {
    const { anchorEl } = this.state;

    return (
      <div>
        <Button
          aria-owns = {anchorEl ? 'simple-menu' : null}
          aria-haspopup = "true"
          onClick = {this.handleClick}
        >
          Open Menu
        </Button>
        <Menu
          id = "simple-menu"
          anchorEl = {anchorEl}
          open = {Boolean(anchorEl)}
          onClose = {this.handleClose}
        >
          <MenuItem onClick = {this.handleClose}>Profile</MenuItem>
          <MenuItem onClick = {this.handleClose}>My account</MenuItem>
          <MenuItem onClick = {this.handleClose}>Logout</MenuItem>
        </Menu>
      </div>
    );
  }
}

export default ProviderMenu;

Что это делает: open = {Boolean(anchorEl)}? Разве это не должно быть просто open = {!!anchorEl}, если у this.state.anchorEl есть значение, он должен быть открытым.

Chase DeAnda 13.06.2018 23:23

Я не сижу за компьютером, чтобы проверить это, но я бы попробовал отключить функцию handleClose на MenuItems. Возможно, вы заметили эффект пузыря.

Chimera.Zen 03.07.2018 21:16

Я ошибался. В этом пример меню работает нормально. Я удалил "бесполезные конструкторы" и не использовал функцию mapStateToProps

Chimera.Zen 03.07.2018 21:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
3
2 420
0

Другие вопросы по теме