You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React-JHipster中ReactStrap Popover覆盖Modal问题求助

ReactStrap Popover 覆盖 Modal 问题

我在使用ReactStrap开发时遇到一个问题:添加在Font Awesome图标上的Popover会覆盖弹出的Modal。

问题截图:
问题截图1
问题截图2

我的代码如下:

<details data-popover="right">
          <summary>
            <FontAwesomeIcon
              onClick={togglePopover}
              icon={faEllipsisVertical}
              style={{ color: '#d9d9d9' }}
              type="button"
              className="componente-boton circle-icon"
              id={'elipsis-icon'}
            />
          </summary>
          <Popover
            target="elipsis-icon"
            isOpen={popoverOpen}
            placement="bottom"
            trigger="hover"
            className="notificaciones-popover mi-popover"
          >
            <div>
              <ul className="list-group mb-0">
                <li className="list-group-item">
                  <p onClick={navToPath} style={{ cursor: 'pointer' }}>
                    Editar
                  </p>
                  <p onClick={toggleModal} style={{ cursor: 'pointer' }}>
                    Eliminar
                  </p>
                  <div className="mi-pagina-modal-modal">
                    <Modal isOpen={modal} toggle={toggleModal} className="mi-pagina-modal">
                      <ModalBody className="mi-pagina-modal-body">
                        <img src="../../../../content/images/alerta.png" alt="Alerta" className="mi-pagina-modal-img" />
                        <h5 className="mi-pagina-titulo-modal">Eliminar</h5>
                        <div className="mi-pagina-modal-texto">
                          <p>¿Estas seguro de eliminar “{blog.title}”?</p>
                        </div>
                        <Button onClick={toggleModal} className="mi-pagina-btn-modal back">
                          Cancelar
                        </Button>
                        <Button onClick={onDelete} className="mi-pagina-btn-modal submit">
                          Eliminar
                        </Button>
                      </ModalBody>
                    </Modal>
                  </div>
                </li>
              </ul>
            </div>
          </Popover>
        </details>

我期望激活Modal时,Popover能隐藏在Modal后方。


解决方案

方法1:打开Modal时同步关闭Popover

点击“Eliminar”触发Modal的同时,直接关闭Popover,从根源避免层级冲突。修改toggleModal函数:

const toggleModal = () => {
  setModal(!modal);
  setPopoverOpen(false); // 强制关闭Popover
};

方法2:调整CSS层级

通过修改z-index让Modal层级高于Popover:

/* ReactStrap默认Popover z-index为1060,Modal为1050,需要调整Modal层级 */
.mi-pagina-modal {
  z-index: 1070 !important;
}

.mi-popover {
  z-index: 1040;
}

方法3:重构Modal位置(推荐)

Modal属于全局层级组件,不应该嵌套在Popover内部,将Modal移到Popover外部:

<details data-popover="right">
  <summary>
    <FontAwesomeIcon
      onClick={togglePopover}
      icon={faEllipsisVertical}
      style={{ color: '#d9d9d9' }}
      type="button"
      className="componente-boton circle-icon"
      id={'elipsis-icon'}
    />
  </summary>
  <Popover
    target="elipsis-icon"
    isOpen={popoverOpen}
    placement="bottom"
    trigger="hover"
    className="notificaciones-popover mi-popover"
  >
    <div>
      <ul className="list-group mb-0">
        <li className="list-group-item">
          <p onClick={navToPath} style={{ cursor: 'pointer' }}>
            Editar
          </p>
          <p onClick={toggleModal} style={{ cursor: 'pointer' }}>
            Eliminar
          </p>
        </li>
      </ul>
    </div>
  </Popover>
</details>

{/* Modal移到Popover外部 */}
<div className="mi-pagina-modal-modal">
  <Modal isOpen={modal} toggle={toggleModal} className="mi-pagina-modal">
    <ModalBody className="mi-pagina-modal-body">
      <img src="../../../../content/images/alerta.png" alt="Alerta" className="mi-pagina-modal-img" />
      <h5 className="mi-pagina-titulo-modal">Eliminar</h5>
      <div className="mi-pagina-modal-texto">
        <p>¿Estas seguro de eliminar “{blog.title}”?</p>
      </div>
      <Button onClick={toggleModal} className="mi-pagina-btn-modal back">
        Cancelar
      </Button>
      <Button onClick={onDelete} className="mi-pagina-btn-modal submit">
        Eliminar
      </Button>
    </ModalBody>
  </Modal>
</div>

内容的提问来源于stack exchange,提问作者Alonso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 21:47:43