Реагируйте, как закрыть всплывающее окно с модальным

С react-bootstrap у меня есть всплывающее окно, содержащее список. При нажатии на один из элементов списка открывается модальное окно.

Как закрыть всплывающее окно при открытии модального окна?

Я попытался:

  • rootClose но это не работает
  • React Bootstrap - как вручную закрыть OverlayTrigger, который закрывает оба, всплывающее окно и модальное окно

    class TypeColumn extends React.Component {
    constructor(props, context) {
        super(props, context);
        this.close = this.close.bind(this);
    }
    
    close() {
        this.refs.overlay.hide();
    }
    
    render() {
        const popoverClick = (
            <Popover id="popover-trigger-click-root-close">
                <ul>
                    <NumberOptions onClick={this.close} />
                </ul>
            </Popover>
        );
    
        return (
            <OverlayTrigger
                show={show}
                trigger="click"
                placement="bottom"
                overlay={popoverClick}
                ref="overlay"
            >
                <i
                    className={columnTypeIcon} aria-hidden="true"
                />
            </OverlayTrigger>
        );
    }
    }
    
    class NumberOptions extends React.Component {
    constructor(props) {
        super(props);
        this.open = this.open.bind(this);
    
        this.state = {
            showModal: false,
        };
    }
    
    open() {
        this.setState({ showModal: true });
        this.props.onClick();
    }
    
    render() {
        return (
            <div>
                <li
                    data-value={DATA_TYPES.NUMBER}
                    onClick={this.open}
                >
                    Options nombre
                </li>
    
                <Modal
                  show={showModal}
                  dialogClassName={styles.customModal}
                >
                ...
                </Modal>
            </div>
        );
    }
    }
    

person Philippe    schedule 28.08.2017    source источник
comment
Покажите код, что вы использовали, пожалуйста.   -  person Andrew    schedule 28.08.2017
comment
@ Андрей, я добавил код, есть идеи?   -  person Philippe    schedule 13.09.2017
comment
Вам нужно переместить Modal из NumberOptions, он должен быть как минимум на том же уровне, что и OverlayTrigger.   -  person Andrew    schedule 13.09.2017
comment
@Андрей, работает, спасибо. Можете ли вы опубликовать это как ответ, чтобы я мог принять его?   -  person Philippe    schedule 13.09.2017
comment
Рад помочь :)   -  person Andrew    schedule 13.09.2017


Ответы (1)


Поскольку ваш компонент Modal является дочерним элементом NumberOptions, Modal тоже закрывается, когда закрывается NumberOptions.

Итак, вам нужно поднять компонент Modal как минимум до того же уровня, что и OverlayTrigger.

person Andrew    schedule 13.09.2017