Неправильное расположение всплывающего окна пользовательского интерфейса React Material при создании компонента

#reactjs #popover #react-redux #material-ui

#reactjs #всплывающее окно #react-redux #материал-пользовательский интерфейс

Вопрос:

Я работаю над созданием отдельных компонентов для всех утилит, предоставляемых Material UI, с использованием Redux framework.

Я застрял в создании всплывающего компонента.

Проблема в том, что когда я вызываю контейнер всплывающего окна, он вылетает из верхнего левого угла экрана. Однако при создании того же всплывающего окна с использованием простого фреймворка react. Все работает нормально.

Фрагмент кода: Popover.js

 

class PopoverTip extends Component {

    constructor(props) {
        super(props);
    }

  handleRequestClose = () => {
    this.props.togglePopover();
  };

  render() {
    const { isOpen, anchorEl } = this.props;
    return (
      < div>
        {isOpen amp;amp; < Popover
          open={isOpen}
          anchorEl={anchorEl}
          anchorOrigin={{horizontal: 'left', vertical: 'bottom'}}
          targetOrigin={{horizontal: 'left', vertical: 'top'}}
          animation={PopoverAnimationVertical}
          onRequestClose={this.handleRequestClose}>
          < Menu>
            < MenuItem primaryText="Refresh" />
            < MenuItem primaryText="Help amp;amp; feedback" />
            < MenuItem primaryText="Settings" />
            < MenuItem primaryText="Sign out" />
          </ Menu>
        </ Popover>}
      </ div>
    );
  }
}

export default PopoverTip;


  

ExampleComponent.js — оттуда, где я вызываю элемент popover и показываю всплывающий элемент

 

showPopover(event) {
    event.preventDefault();
    this.props.togglePopover(event.currentTarget);
};

<IconButton onClick={ this.showPopover.bind(this) }>
  <HelpIco />
</IconButton>
<PopoverTip />


  

Пожалуйста, обратите внимание, что функциональность всплывающего окна работает нормально, и я также передаю это event.currentTarget, который на самом деле является текущим элементом.

Единственная проблема, с которой я сталкиваюсь, — это размещение этого всплывающего окна.

Комментарии:

1. возникает та же проблема

Ответ №1:

Это немного поздно, но я только что исправил эту проблему в своем собственном проекте.

Из-за опечатки я переходил undefined к anchorEl реквизиту моего <Popover> компонента. Я полагаю, что без действительного привязки всплывающее окно по умолчанию отображается в верхнем левом углу окна просмотра.

Ответ №2:

Это случилось со мной, когда я сделал всплывающий компонент без состояния, а затем импортировал его в свой родительский контейнер. Я забыл передать anchorEl в качестве реквизита и в итоге получил меню в левом верхнем углу. Кажется, меню будет делать это по умолчанию, если есть ошибка во всплывающем окне.