Я хочу открыть нажатое изображение в модальном режиме react

#react-modal

#react-модальный

Вопрос:

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

 class SingleGallery extends Component{
  constructor () {
    super();
    this.state = {
      showModal: false
    };
    
    this.handleOpenModal = this.handleOpenModal.bind(this);
    this.handleCloseModal = this.handleCloseModal.bind(this);
  }
  
  handleOpenModal () {
    this.setState({ showModal: true });
  }
  
  handleCloseModal () {
    this.setState({ showModal: false });
  }
  render(){
    let singleGalleryObj = [
      {image: imageGallery1},
      {image: imageGallery2},
      {image: imageGallery3},
      {image: imageGallery4},
      {image: imageGallery1},
      {image: imageGallery2}
    ]
    return(
      <div class="singleGallery">
        <div class="SGContent">
            <div class="title">Gallery 1</div>
            <div class="images">
              {singleGalleryObj.map((para) => {
                  return (
                    <div>
                      <div class="galleryBox" onClick={this.handleOpenModal}>
                        <div class="image">
                          <img src={para.image} />
                        </div>
                      </div>
                      <Modal 
                          isOpen={this.state.showModal}
                          contentLabel="Minimal Modal Example"
                        >
                          <button onClick={this.handleCloseModal}>Close Modal</button>
                          <img src={para.image}/>
                        </Modal>
                    </div>
                      
                  )
                })}
              
            </div>
          </div>
      </div>
    )
  }
} 
  

Ответ №1:

Я думаю, что проблема связана с контроллером. У вас есть только 1 контроллер для отображения или скрытия модального. У вас может быть только 1 модальное значение для вашей функции рендеринга, например

 <div class="singleGallery">
    <div class="SGContent">
        <div class="title">Gallery 1</div>
        <div class="images">
          {singleGalleryObj.map((para) => {
              return (
                <div>
                  <div class="galleryBox" onClick={() => this.handleOpenModal(para)}>
                    <div class="image">
                      <img src={para.image} />
                    </div>
                  </div>
                </div>
                  
              )
            })}
          <Modal 
                      isOpen={this.state.showModal}
                      contentLabel="Minimal Modal Example"
                    >
                      <button onClick={this.handleCloseModal}>Close Modal</button>
                      {this.state.selectedImage ? <img src={selectedImage.image}/> : null}
                    </Modal>
        </div>
      </div>
  </div>
  

и ваш открытый модальный обработчик может быть следующим

 handleOpenModal (selectedImage) {
   this.setState({ showModal: true, selectedImage });
}
  

дайте мне знать, работает это или нет.