С ReactJS Popup, как я могу сделать так, чтобы он показывал только одно всплывающее окно за раз? - PullRequest
0 голосов
/ 20 декабря 2018

Я экспериментирую с различными всплывающими библиотеками React.Я нашел responsejs-popup и начал играть с кодами и коробкой.Я создал форк среды здесь https://codesandbox.io/s/pp60zjkxlj

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

Возможно ли это с этой библиотекой?

См. https://codesandbox.io/s/pp60zjkxlj

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Я бы посмотрел на Порталы , где вы можете использовать портал, который находится за пределами jsx, который желает его использовать.

ИМХО, это лучший способ реализовать модальное и яПолагайте, что вам не нужно добавлять еще одну зависимость в ваш проект и просто создайте ее таким образом, который соответствует вашим потребностям.

0 голосов
/ 20 декабря 2018

Вам нужно будет передать реквизиты во всплывающее окно, чтобы сообщить ему, когда открывать, а когда не открывать.

Ваш компонент должен иметь state, установленный для каждого всплывающего окна, или передаваться в реквизитах, чтобы сообщить всплывающим подсказкамкогда отображать.Вы можете установить в конструкторе состояние по умолчанию и распространять его перед установкой нового состояния с новым открытым Popover.Вот как я работаю с модалами.

  constructor(props) {
    super(props);
    this.state = {
      vendor: {} // Just showing my default state this gets set and this.defaultState is spread after my fetch request completes in componentWillMount()
    };
    this.defaultState = {
      isPopoverOpen: {
        // ---- Default Popover booleans can go here
        editVendor: false
      }
    };
  }

Актуальная функция, которая управляет состоянием Popover в состоянии.

// onClick of element would be onClick={this.handleTogglePopover('editVendor')}

  handleTogglePopover = id => { 
    const currentState = Object.assign({}, this.state);
    this.setState({
           currentState,
           ...this.defaultState, // spreading default will set everything to false
           isPopoverOpen: {
              [id]: true // then the newly clicked to true
       }
    });
  };
0 голосов
/ 20 декабря 2018

имеют общее состояние для всплывающего окна при нажатии первой кнопки, устанавливают состояние для первой кнопки и на основе состояния

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...