JGuang

弹窗

Modal · Ant Design Mobile

交互预览
npm install antd-mobile@5.43.0

弹窗 Modal

用于重要信息的告知或操作的反馈,并附带少量的选项供用户进行操作。

安装

npm install antd-mobile@5.43.0

antd-mobile 是移动网页组件库,不是 React Native 或小程序组件。React 19 项目需在入口用 unstableSetRender 注册 createRoot,否则 Toast、Dialog 等命令式 API 无法渲染;深色模式通过 <html data-prefers-color-scheme="dark"> 切换。

示例来自 Ant Design Mobile 官方仓库(MIT),固定在 npm 5.43.0 对应的提交;示例中的 DemoBlock 等展示辅助组件由 JGuang 重写,不属于 antd-mobile 的 API。

用于重要信息的告知或操作的反馈,并附带少量的选项供用户进行操作。

何时使用

需要用户处理事务,又不希望跳转页面以致打断工作流程时,可以使用 Modal 在当前页面正中打开一个浮层,承载相应的操作。

示例

属性

属性说明类型默认值
actions操作按钮列表Action[][]
afterCloseModal 完全关闭后的回调() => void-
afterShow完全展示后触发() => void-
bodyClassNameModal 内容类名string-
bodyStyleModal 内容样式React.CSSProperties-
closeOnAction点击操作按钮后后是否关闭booleanfalse
closeOnMaskClick是否支持点击遮罩关闭弹窗booleanfalse
content弹窗内容React.ReactNode-
destroyOnClose不可见时是否销毁 DOM 结构booleanfalse
disableBodyScroll背景蒙层是否禁用 body 滚动booleantrue
forceRender被隐藏时是否渲染 DOM 结构booleanfalse
getContainer自定义弹窗的父容器HTMLElement | (() => HTMLElement) | nullnull
header顶部区域React.ReactNode-
image图片 urlstring-
maskClassNameModal 遮罩类名string-
maskStyleModal 遮罩样式React.CSSProperties-
onAction点击操作按钮时触发(action: Action, index: number) => void | Promise<void>-
onClose关闭时触发() => void-
showCloseButton是否在右上角显示关闭图标按钮booleanfalse
stopPropagation阻止某些事件的冒泡PropagationEvent[]['click']
title弹窗标题React.ReactNode-
visible显示隐藏booleanfalse

Action

属性说明类型默认值
classNameAction 类名string-
danger是否为危险状态booleanfalse
disabled是否为禁用状态booleanfalse
key唯一标记string | number-
onClick点击时触发() => void | Promise<void>-
primary是否为主要状态booleanfalse
styleAction 样式React.CSSProperties-
text标题React.ReactNode-

指令式

可以通过指令式的方式使用 Modal:

Modal.show

const handler = Modal.show(props)

可以通过调用 Modal 上的 show 方法直接打开弹窗,其中 props 参数的类型同上表,但不支持传入 visible 属性。

当弹窗被关闭后,组件实例会自动销毁。

show 方法的返回值为一个组件控制器,包含以下属性:

属性说明类型默认值
close关闭弹窗() => void-

show 只是一个很基础的方法,在实际业务中,更为常用的是下面的 alert 和 confirm 方法:

Modal.alert

alert 接受的参数同 show,但不支持 closeOnAction actions 属性,它的返回值不是一个控制器对象,而是 Promise<void>。

此外,它还额外支持以下属性:

属性说明类型默认值
confirmText确认按钮的内容ReactNode'我知道了'
onConfirm点击确认按钮时触发() => void | Promise<void>-

Modal.confirm

confirm 接受的参数同 show,但不支持 closeOnAction actions 属性,它的返回值不是一个控制器对象,而是 Promise<boolean>。

此外,它还额外支持以下属性:

属性说明类型默认值
cancelText取消按钮的内容ReactNode'取消'
confirmText确认按钮的内容ReactNode'确认'
onCancel点击取消按钮时触发() => void | Promise<void>-
onConfirm点击确认按钮时触发() => void | Promise<void>-

Modal.clear

可以通过调用 Modal 上的 clear 方法关闭所有打开的弹窗,通常用于路由监听中,处理路由前进、后退不能关闭弹窗的问题。

FAQ

有没有不含内容、不含各种按钮、不含边距的弹窗?

有,可以直接使用更底层的 CenterPopup 组件。