Реагировать - Скрыть другие поповеры, когда один поповер открыт

В ReactJS у меня есть компонент Popover, определенный следующим образом:

export class Popover extends React.Component<IProps, { isVisible?: boolean }>

Часть рендеринга выглядит так:

private renderPopover = () => {
        var actions = this.props.actions.filter(x => x.hide === false || x.hasOwnProperty("hide") === false);

        return <div className="popover schedule-item-row-menu">
            <ul className="nav nav-pills nav-stacked row-actions">
                {actions.map(x => {
                    return <li className="pointer" onClick={x.action}>{x.title}</li>;
                })}
            </ul>
        </div>;
    }

    render() {
        return <div className="inline-block">
                   <span ref={e => this.popoverElement = e} onClick={this.toggle}>{this.props.children}</span>
                   {this.state.isVisible && this.renderPopover()}
                </div>;

И toogle выглядит так:

private toggle = (e) => {
        var isVisible = !this.state.isVisible;


         if(isVisible) 
            document.addEventListener("click", this.toggle);
         else 
            document.removeEventListener("click", this.toggle);

        this.setState({ isVisible });

        e.stopPropagation();
    }

Popover используется так:

<div classname="outerDivName">
                    <Popover actions={this.props.actions}>
                        <div>here is the div that show the popover on click</div>
                    </Popover>
</div>

Всплывающее окно отображается, как и ожидалось, когда я щелкаю div, и оно скрывается, когда я щелкаю тот же div или фон страницы. Однако, и это моя проблема, если я щелкаю по другому div, у которого также есть всплывающее окно, первое всплывающее окно остается открытым, поэтому оба они открыты.

Как сделать так, чтобы первый исчез, а затем появился второй?

0 ответов

Другие вопросы по тегам