Я пытаюсь использовать всплывающее подтверждение дизайна муравья, чтобы подтвердить закрытие модального окна, в следующем коде я получаю всплывающее подтверждение для запуска и модальное закрытие, но всплывающее подтверждение остается открытым.
Кто-нибудь знает, как закрыть 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.
Вы можете переместить компонент <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;
Выход:
Передайте
destroyOnClose
реквизит модальному. В popconfirm используйтеgetPopContainer
, чтобы смонтировать popconfirm внутри модального окна.getPopupContainer = {(node) => (node ? node.parentElement : document.body)}