Лучший способ показать дочерний модал на карте?

Ссылка на проект: https://repl.it/repls/PrudentAptSystems

У меня есть App.js и PageFive.js. App.js содержит массив:

state = {
    boxes: [
      {
        cbIndex: "cb1",
        name: "Bob"
      },
      {
        cbIndex: "cb2",
        name: "Daniel"
      },...

... и PageFive.js содержит функцию карты, которая отображает поля:

{this.props.boxes.map((box, id, image, moduleId) => (
            <div key={id} className="col-md-6 col-lg-4">
              <div className="sample-container">
                <div className="container">
                 <div className="row">
                  <div className="col-md-12">
                    <ul>
                      <li>
                        <input
                          type="checkbox"
                          id={box.cbIndex}...

Скриншот:

введите здесь описание изображения

Я бы хотел, чтобы для каждого нажатия кнопки («Информация») появлялось другое модальное окно.

В настоящее время все работает как надо, за исключением того, что отображается только последний модальный элемент (их 6), независимо от того, какую кнопку «Информация» я выбираю:

введите здесь описание изображения

Я использую Reactstrap, и остальная часть моего кода выглядит так:

(СтраницаFive.js):

class PageFive extends Component {
  constructor(props) {
    super(props);

    this.state = {
      modal: false
    };

    this.toggle = this.toggle.bind(this);
  }

  toggle() {
    this.setState({
      modal: !this.state.modal
    });
  }

JSX для кнопки и модального окна, которое вложено в функцию карты выше:

<Button color="danger" onClick={this.toggle.bind(this, moduleId)}>
{this.props.buttonLabel}
</Button>
<Modal
isOpen={this.state.modal}
toggle={this.toggle.bind(this, moduleId)}
className={this.props.className}
>
<ModalHeader toggle={this.toggle}>
    <p>hi </p>
</ModalHeader>
<ModalBody>
    Lorem ipsum dolor sit amet, consectetur
    adipisicing elit, sed do eiusmod tempor
    incididunt ut labore et dolore magna aliqua.
</ModalBody>
<ModalFooter>
    <Button color="primary" onClick={this.toggle}>
    Do Something
    </Button>{" "}
    <Button
    color="secondary"
    onClick={this.toggle}
    >
    Cancel
    </Button>
</ModalFooter>

Есть ли способ сделать это без использования порталов или Redux?


person bunnycode    schedule 30.01.2019    source источник
comment
Добавьте свойство в свой объект ящиков для каждого ящика, чтобы сохранить модальное отображение и переключать модель в соответствии с этим.   -  person suhail c    schedule 30.01.2019
comment
@suhailc Спасибо. Не могли бы вы привести пример того, что вы имеете в виду?   -  person bunnycode    schedule 30.01.2019
comment
вы можете продублировать свое приложение здесь repl.it/languages/reactjs   -  person suhail c    schedule 30.01.2019
comment
@suhailc Ну вот! repl.it/repls/PrudentAptSystems   -  person bunnycode    schedule 30.01.2019
comment
Отредактировал ваш проект. Проверь сейчас. Не использовал метод, о котором я упоминал выше, использовал другой способ переключения repl.it/repls/SeveralTragicStaff @банникод   -  person suhail c    schedule 30.01.2019
comment
@suhailc Это работает! Большое спасибо. Если вы хотите опубликовать свое решение в качестве ответа, я отмечу его как правильное. Еще раз спасибо, потратил на это весь день и крутился кругами. Очень признателен.   -  person bunnycode    schedule 30.01.2019


Ответы (1)


Вместо того, чтобы переключать модальные окна, используя значение true или false в состоянии, используйте идентификатор модальных окон, чтобы отслеживать, какое модальное окно открыто. Я отредактировал проверку вашего проекта на странице https://repl.it/repls/SeveralTragicStaff.

person suhail c    schedule 30.01.2019