JGuang

气泡确认框

Popconfirm · Ant Design

交互预览
npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

气泡确认框

点击元素,弹出气泡式的确认框。

何时使用

目标元素的操作需要用户进一步的确认时,在目标元素附近弹出浮层提示,询问用户。

和 confirm 弹出的全屏居中模态对话框相比,交互形式更轻量。

代码演示

  • 基本 · basic
  • 国际化 · locale
  • 位置 · placement
  • 贴边偏移 · shift
  • 条件触发 · dynamic-trigger
  • 自定义 Icon 图标 · icon
  • 异步关闭 · async
  • 基于 Promise 的异步关闭 · promise
  • 自定义语义结构的样式和类 · style-class

API

通用属性参考:通用属性

参数说明类型默认值版本全局配置
cancelButtonPropscancel 按钮 propsButtonProps-×
cancelText取消按钮文字string取消×
disabled阻止点击 Popconfirm 子元素时弹出确认框booleanfalse×
icon自定义弹出气泡 Icon 图标ReactNode<ExclamationCircleFilled />×
okButtonPropsok 按钮 propsButtonProps-×
okText确认按钮文字string确定×
okType确认按钮类型stringprimary×
showCancel是否显示取消按钮booleantrue4.18.0×
title确认框标题ReactNode | () => ReactNode-×
description确认内容的详细描述ReactNode | () => ReactNode-5.1.0×
onCancel点击取消的回调function(e)-×
onConfirm点击确认的回调function(e)-×
onPopupClick弹出气泡点击事件function(e)-5.5.0×

<Antd component="Alert" title="以下 API 为 Tooltip、Popconfirm、Popover 共享的 API。" type="info" banner="true"></Antd>

参数说明类型默认值版本全局配置
align请参考 dom-align 进行配置object-×
arrow修改箭头的显示状态以及修改箭头是否指向目标元素中心boolean | { pointAtCenter: boolean }true5.2.0Tooltip: 6.0.0,Popover: 6.0.0,Popconfirm: 6.0.0
autoAdjustOverflow气泡被遮挡时自动调整位置booleantrue×
color背景颜色string-4.3.0×
classNames用于自定义组件内部各语义化结构的 class,支持对象或函数Record<SemanticDOM, string> | (info: { props }) => Record<SemanticDOM, string>-5.23.0Tooltip: 5.23.0,Popover: 5.23.0,Popconfirm: 5.23.0
defaultOpen默认是否显隐booleanfalse4.23.0×
destroyTooltipOnHide关闭后是否销毁 dombooleanfalse×
destroyOnHidden关闭后是否销毁 dombooleanfalse5.25.0×
fresh默认情况下,Tooltip 在关闭时会缓存内容。设置该属性后会始终保持更新booleanfalse5.10.0×
getPopupContainer浮层渲染父节点,默认渲染到 body 上(triggerNode: HTMLElement) => HTMLElement() => document.body×
mouseEnterDelay鼠标移入后延时多少才显示 Tooltip,单位:秒number0.1Tooltip: 6.6.0,Popover: 6.6.0,Popconfirm: 6.6.0
mouseLeaveDelay鼠标移出后延时多少才隐藏 Tooltip,单位:秒number0.1Tooltip: 6.6.0,Popover: 6.6.0,Popconfirm: 6.6.0
overlayClassName卡片类名, 请使用 classNames.root 替换string-×
overlayStyle卡片样式, 请使用 styles.root 替换React.CSSProperties-×
overlayInnerStyle卡片内容区域的样式对象, 请使用 styles.container 替换React.CSSProperties-×
placement气泡框位置,可选 top left right bottom topLeft topRight bottomLeft bottomRight leftTop leftBottom rightTop rightBottomstringtop×
styles用于自定义组件内部各语义化结构的行内 style,支持对象或函数Record<SemanticDOM, CSSProperties> | (info: { props }) => Record<SemanticDOM, CSSProperties>-5.23.0Tooltip: 5.23.0,Popover: 5.23.0,Popconfirm: 5.23.0
trigger触发行为,可选 hover | focus | click | contextMenu,可使用数组设置多个触发行为string | string[]hoverTooltip: 6.1.0,Popover: 6.1.0,Popconfirm: 6.1.0
open用于手动控制浮层显隐,小于 4.23.0 使用 visible(为什么?)booleanfalse4.23.0×
zIndex设置 Tooltip 的 z-indexnumber-×
onOpenChange显示隐藏的回调(open: boolean) => void-4.23.0×

Semantic DOM

语义节点原生说明版本
root根元素,设置绝对定位、层级、变换原点、箭头指向和弹层容器样式—
container容器元素,设置背景色、内边距、圆角、阴影、边框和内容展示样式—
icon图标元素,设置确认图标的尺寸、颜色和布局样式6.4.0
title标题元素,设置标题文本样式和间距—
content描述元素,设置描述文本样式和布局—
arrow箭头元素,设置宽高、位置、颜色和边框样式—

语义说明来源: vendor/components/popconfirm/demo/_semantic.tsx

主题变量(Design Token)

类型、继承关系和原生令牌声明保持固定源码原文;默认值由原生主题计算,并可能受 ConfigProvider 覆盖。本表不伪造静态默认值。

令牌类型原生说明
zIndexPopupnumber确认框 z-index

声明来源: vendor/components/popconfirm/style/index.ts

import type { CSSObject } from '@ant-design/cssinjs';

import type { FullToken, GenerateStyle, GetDefaultToken } from '../../theme/internal';

import { genStyleHooks } from '../../theme/internal';

export interface ComponentToken {
  /**
   * @desc 确认框 z-index
   * @descEN z-index of Popconfirm
   */
  zIndexPopup: number;
}

/**
 * @desc Popconfirm 组件的 Token
 * @descEN Token for Popconfirm component
 */
export interface PopconfirmToken extends FullToken<'Popconfirm'> {}

FAQ

<Antd component="Alert" title="以下常见问题均适用于 Tooltip、Popconfirm、Popover 组件" type="warning" banner="true"></Antd>

为何在严格模式中有时候会出现 findDOMNode is deprecated 这个警告?

这是由于 @rc-component/trigger 的实现方式导致的,@rc-component/trigger 强制要求 children 能够接受 ref,否则就会 fallback 到 findDOMNode,所以 children 需要是原生 html 标签,如果不是,则需要使用 React.forwardRef 把 ref 透传到原生 html 标签。

为什么自定义子组件无法正常工作?

类似问题: #15909, #12812。

请确保子元素能接受 onMouseEnter、onMouseLeave、onPointerEnter、onPointerLeave、onFocus、onClick 事件。参考示例

placement 的行为逻辑是什么?

当屏幕空间足够时,会按照 placement 的设置进行弹层。当空间不足时则会取反向位置进行弹层(例如 top 不够时,会改为 bottom,topLeft 不够时会改为 bottomLeft)。单一方向如 top bottom left right 当贴边时进行自动位移:

<img alt="shift" height="200" src="https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*sxaTTJjLtIMAAAAAAAAAAAAADrJ8AQ/original" />

当设置为边缘对齐方向如 topLeft bottomRight 等,则会仅做翻转而不做位移。

如何支持键盘无障碍访问?

Tooltip 等组件的默认触发方式(trigger)为 hover,不包含 focus,因此无法响应键盘聚焦事件。如果你希望组件支持键盘操作,可以通过以下方式开启:

  • 单个组件开启:将 trigger 属性设置为包含 focus 的值,例如 trigger="focus" 或 trigger={['hover', 'focus']}。
  • 全局开启:通过 ConfigProvider 进行全局配置,这样应用内的所有相关组件都会默认支持键盘聚焦触发。
import { ConfigProvider, Tooltip, Button } from 'antd';

// 单个组件
<Tooltip trigger={['hover', 'focus']} title="Title">
  <Button>Button</Button>
</Tooltip>

// 全局配置
<ConfigProvider
  tooltip={{ trigger: ['hover', 'focus'] }}
  popover={{ trigger: ['hover', 'focus'] }}
  popconfirm={{ trigger: ['hover', 'focus'] }}
>
  <App />
</ConfigProvider>

更多问题,请参考 Tooltip FAQ。

原生通用属性

Tips: 以下通用属性适用于 antd 大部分组件,不支持的组件会单独说明。

参数说明类型默认值
style自定义样式CSSProperties-
className自定义类名string-
rootClassName添加在组件最外层的 classNamestring-
autoFocus自动获取焦点,仅对表单类、链接、交互容器等可聚焦元素生效booleanfalse

安装并复现示例

npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

使用 ConfigProvider 和原生 App,并单独配置 dayjs 语言。每个示例在查看代码中列出完整源码文件和额外固定依赖。示例名称用于选择演示,不是组件通用属性。主题、语言与 SSR 初始化见资源安装指南。

原生类型参考

源码查看器包含未修改的原生实现和以下声明文件,继承类型仍位于原生包中。代码中的英文注释保留为源码参考。

  • vendor/components/popconfirm/PurePanel.tsx
  • vendor/components/popconfirm/index.tsx
  • vendor/components/popconfirm/style/index.ts

来源与许可

https://github.com/ant-design/ant-design/tree/4a39f54842eade4e565ab336ef6097cd7e723cdd

保留原生中英文正文与可执行示例;官网专用的嵌入章节和令牌表格在本地展开。Ant Design 使用 MIT 许可,另列依赖的许可证也需保留。上传预览禁止向外发起请求,不提供后端服务。