Antd v5.8 modal.confirm 手动控制关闭


字数:475 阅读时长:2分钟 阅读:85

开发中经常需要使用操作提示弹窗,在 Antd 中的 Modal 组件提供了 confirm 方法,可以快速实现操作提示弹窗。本文就来介绍一下如何使用 Modal.useModal 创建弹窗,并且实现手动控制弹窗的关闭逻辑。

Antd Modal.confirm

一、代码演示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import { message, Modal } from 'antd'
import { forwardRef, useImperativeHandle } from 'react'
import { delQue } from '@/api/question.js'
import { useQuestionStore, QuestionGetters } from '@/store/question.js'

const Com = ({ getList }, ref) => {
useImperativeHandle(ref, () => ({
showModal,
}))
const [modal, contextHolder] = Modal.useModal()
const { setColl, changeTime } = useQuestionStore()

const submit = async ({ id, key }, e) => {
try {
let { code, msg, records } = await delQue({
collId: id,
resourceType: key,
})
if (code === 0) {
message.success('删除成功')
let coll = QuestionGetters('coll')
if (`${id}` === coll.id + '') {
setColl({
type: coll.type,
id: '',
})
changeTime({
coll: Date.now(),
})
} else {
getList()
}
/* 关键步骤 2 */
await e()
}
} catch (e) {
console.log(e)
}
}

const showModal = async (data) => {
let { collName } = data
const confirmed = await modal.confirm({
title: '确认删除问题集?',
content: <div>此问题集中所有资源都将被删除,确认删除"{collName}"?</div>,
onCancel() {
console.log('cancled')
},
/* 关键步骤 1 */
onOk(e) {
submit(data, e)
},
})
console.log('Confirmed: ', confirmed)
}

return <>{contextHolder}</>
}

export default forwardRef(Com)

二、代码解读

onOk 事件: 点击确定回调,参数为关闭函数,返回 promiseresolve 后自动关闭。这个参数很关键,我们可以通过这个参数来手动控制弹窗的关闭。

详见:
关键步骤 1:传出去的 onOk 事件,调用 submit 方法,传入 data 和 e,e 即为关闭函数,调用 e 即可关闭弹窗。
关键步骤 2:在 submit 方法中,根据接口请求结果,code===0 成功,则调用 e 即可关闭弹窗;否则不关闭弹窗。


欢迎访问:天问博客

本文作者: Tiven
发布时间: 2023-09-04
最后更新: 2023-09-12
本文标题: Antd v5.8 modal.confirm 手动控制关闭
本文链接: https://www.tiven.cn/p/b91bb773/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
欢迎留言,提问 ^_^
个人邮箱: tw.email@qq.com
notification icon
博客有更新,将会发送通知给您!