Кнопка React-Modal Close не работает

Я использую модальный режим, но моя кнопка для закрытия модального окна не запускает onClick={this.handleCloseModal}, что делает кнопку внутри модального полностью невосприимчивой. Я пробовал разные вещи в течение нескольких часов и не могу понять, почему это не работает. В консоли не появляется никаких ошибок, и я не могу ничего записать в консоль... Пожалуйста, смотрите код ниже, я только что бился головой о стену без ответов. Я новичок, чтобы реагировать, но чувствую, что это должно работать, так как ошибок нет. Заранее спасибо!

  class Project extends React.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 });
}

componentWillMount() {
    ReactModal.setAppElement('body');
}

    render() {
        const details = this.props.details;

        return (
            <li className="Project" onClick={this.handleOpenModal}>
                <img className="Project-image" src={'projects/' + details.image} alt={details.name}/>
                <div className="Project-overlay">
                    <p>{details.name}</p>
                </div>
                <div >
                    <ReactModal 
                    isOpen={this.state.showModal} 
                    contentLabel="This is my Mods" 
                    shouldCloseOnOverlayClick={true}
                    onRequestClose={this.handleCloseModal}
                    >
                    <div className="modal-header">
                        <h3>{details.name}</h3>
                    </div>
                    <div className="modal-body">
                    </div>
                    <div className="modal-footer">
                        <button onClick={this.handleCloseModal}>Close Modal</button>
                    </div>
                    </ReactModal>

                </div>
                <div className="Project-tag">
                    <p>{details.tag}</p>
                </div>
            </li>
        )
    }
}

person SpaghettiBathtub    schedule 30.11.2017    source источник
comment
Просто для ясности, вы все еще можете закрыть модальное окно, нажав на оверлей, верно? Это означает, что его реквизит onRequestClose работает, и, соответственно, работает ваш обработчик?   -  person Thomas Hennes    schedule 01.12.2017
comment
правильно, поддержка onRequestClose работает, но кнопка не отвечает   -  person SpaghettiBathtub    schedule 01.12.2017
comment
не могли бы вы предоставить живую версию вашего кода в jsbin?   -  person link0047    schedule 01.12.2017
comment
Я считаю, что неправильно устанавливаю состояние в функции handleCloseModal. Я просто не уверен, почему это не работает...   -  person SpaghettiBathtub    schedule 01.12.2017
comment
Ваша функция handleCloseModal в порядке, иначе реквизит onRequestClose не работал бы. Это и было целью моего вопроса. Я думаю, что ответ Арбера - самая многообещающая зацепка. Либо обработчик тега li onClick фиксирует событие, а обработчик тега кнопки onClick никогда не вызывается, либо он вызывается, но событие все равно передается обработчику тега li (поэтому модальное окно закрывается и снова открывается мгновенно, возможно, слишком быстро для вас). уведомление). Вы также можете поместить console.log или даже оператор window.alert в оба ваших обработчика, чтобы отслеживать, когда каждый из них действительно вызывается.   -  person Thomas Hennes    schedule 01.12.2017


Ответы (1)


Попробуйте удалить модальное окно вне тега li? Я просто делаю дикое предположение, возможно, он вызывает onClick={this.handleOpenModal}, где бы вы ни нажимали на Modal, так как он является дочерним элементом элемента списка ?? Стоит попробовать :)

person Arber Sylejmani    schedule 30.11.2017
comment
чтобы было ясно, это для портфолио, поэтому li повторяет все проекты. поэтому перемещение его за пределы li приведет к поражению цели, поскольку все проекты нуждаются в модальном отображении. - person SpaghettiBathtub; 01.12.2017
comment
тогда предоставьте нам JSFiddle или что-то в этом роде!? - person Arber Sylejmani; 01.12.2017
comment
Вы по-прежнему можете временно удалить обработчик onClick из тега списка и открыть модальное окно с помощью простой ссылки или кнопки в целях тестирования. Другая идея состоит в том, чтобы заблокировать распространение события клика в обоих обработчиках, чтобы посмотреть, поможет ли это. - person Thomas Hennes; 01.12.2017
comment
да, как сказал Jaxx, не помешает хотя бы попробовать и посмотреть, работает ли это, тогда есть другие способы реализовать это, например, добавить модальное и остальную часть содержимого li в два отдельных div под li , затем добавьте onClick для его открытия в div, который не содержит модальный. Опять же, стоит попробовать ;) - person Arber Sylejmani; 01.12.2017