Используя Popconfirm от antd для подтверждения закрытия модального окна?

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

Кто-нибудь знает, как закрыть popconfirm, когда он подтверждается, давая ему да?

import { Modal, Popconfirm } from 'antd';
import { useState } from 'react';

export const Ensayo=()=> {
  const [open, setOpen] = useState(false);
  const [popupOpen, setPopupOpen] = useState(false);

  const showModal = () => {
    setOpen(true);
  };

  const handleCancel = () => {
    setPopupOpen(true);
  };

  const handlePopupConfirm = () => {
    setOpen(false);
    setPopupOpen(false);
  };

  const handlePopupCancel = () => {
    setPopupOpen(false);
  };

  return (
    <div>
      <button type = "button" onClick = {showModal}>
        Open Modal
      </button>
      <Modal
        title = "Basic Modal"
        open = {open}
        onCancel = {handleCancel}
      >
        <p>Some contents...</p>
        <Popconfirm
          title = "Are you sure you want to close this modal?"
          open = {popupOpen}
          onConfirm = {handlePopupConfirm}
          onCancel = {handlePopupCancel}
          okText = "Yes"
          cancelText = "No"
        />
      </Modal>
    </div>
  );
}

Я попытался добавить условие popupOpen в качестве условия для рендеринга popconfirm, но оно не работает с этим условием, оно никогда не запускает popconfirm.

Передайте destroyOnClose реквизит модальному. В popconfirm используйте getPopContainer, чтобы смонтировать popconfirm внутри модального окна. getPopupContainer = {(node) => (node ? node.parentElement : document.body)}

Muhammad Nouman Rafique 13.01.2023 03:51
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете переместить компонент <Popconfirm> за пределы <Modal>

проверьте следующий пример

import { Modal, Popconfirm } from "antd";
import { useState } from "react";

export const Ensayo = () => {
  const [open, setOpen] = useState(false);
  const [popupOpen, setPopupOpen] = useState(false);

  const showModal = () => {
    setOpen(true);
  };

  const handleCancel = () => {
    setPopupOpen(true);
  };

  const handlePopupConfirm = () => {
    setOpen(false);
    setPopupOpen(false);
  };

  const handlePopupCancel = () => {
    setPopupOpen(false);
  };

  return (
    <div>
    /* Popconfirm moved here */
      <Popconfirm
        title = "Are you sure you want to close this modal?"
        open = {popupOpen}
        onConfirm = {handlePopupConfirm}
        onCancel = {handlePopupCancel}
        okText = "Yes"
        cancelText = "No"
      />
      <button type = "button" onClick = {showModal}>
        Open Modal
      </button>
      <Modal title = "Basic Modal" open = {open} onCancel = {handleCancel}>
        <p>Some contents...</p>
      </Modal>
    </div>
  );
};

export default Ensayo;

Выход:

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