--- localeCode: en-US order: 66 category: Feedback title: Popconfirm subTitle: Popconfirm icon: doc-popconfirm brief: Used when the operation of the target element requires further confirmation from the user. Compared with Popover, it has a built-in series of configurable action buttons. Compared with Modal, it does not force full-screen centering, and the interaction is lighter. --- ## Demos ### How to import ```jsx import import { Popconfirm } from '@douyinfe/semi-ui'; ``` ### Basic Usage ```jsx live=true import React from 'react'; import { Popconfirm, Button, Toast } from '@douyinfe/semi-ui'; () => { const onConfirm = () => { Toast.success('Confirm save!'); }; const onCancel = () => { Toast.warning('Cancel save!'); }; return ( ); }; ``` ### Type collocation Developers can use scenario-based `OK Type`/`Cancel Type`/`icon` Equal parameters are matched with different styles of bubble confirmation boxes. ```jsx live=true import React, { useState } from 'react'; import { Popconfirm, Radio, RadioGroup, Button } from '@douyinfe/semi-ui/'; import { IconAlertTriangle } from '@douyinfe/semi-icons'; function TypesConfirmDemo(props = {}) { const typeMap = { default: { icon: , }, warning: { icon: , }, danger: { okType: 'danger', icon: , }, tertiary: { icon: , }, }; const keys = Object.keys(typeMap); const [type, setType] = useState('default'); const [visible, _setVisible] = useState(true); const changeType = e => { const type = e && e.target && e.target.value; if (type && keys.includes(type)) { setType(type); } }; const setVisible = visible => _setVisible(visible); const toggleVisible = () => setVisible(!visible); return (
{keys.map(key => ( {key} ))}
); } ``` ### Delay hide `onOk` and `onCancel` can be closed after click through return Promise (supported after v2.19). When onCancel and onOk are triggered, the corresponding Button will automatically switch to `loading: true` promise solve will close the bubble confirmation box, the bubble will remain when promise reject, and button loading will automatically switch to false ```jsx live=true import React from 'react'; import { Popconfirm, Button, Toast } from '@douyinfe/semi-ui'; () => { const onConfirm = () => { return new Promise((resolve, reject) => { setTimeout(() => { console.log('resolve, close popconfirm'); resolve(); }, 2000); }); }; const onCancel = () => { return new Promise((resolve, reject) => { setTimeout(() => { console.log('reject, popconfirm still exist'); reject(); }, 2000); }); }; return ( ); }; ``` ### Use with Tooltip or Popover Please refer to [Use with Tooltip/Popover](/en-US/show/tooltip#Use-with-Popver-or-Popconfirm) ## API Reference | Properties | Instructions | Type | Default | Version | | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | ------------------- | ----------------- | | arrowPointAtCenter | Whether the "small triangle" points to the center of the element, you need to pass in "showArrow = true" at the same time | boolean | false | **0.34.0** | | cancelText | Cancel button text | string | "Cancel" | | cancelButtonProps | Properties for cancel button | object | | **0.29.0** | | cancelType | Cancel button type | string | "tertiary" | | content | Content displayed | string \| ReactNode | | | defaultVisible | Bubble box is displayed by default | boolean | | **0.19.0** | | disabled | Click on the Pop confirmation box to see if the bubbles pop up. | boolean | false | | getPopupContainer | Specify the parent DOM, and the pop-up layer will be rendered into the DOM. Customization needs to set `position: relative` | Function():HTMLElement | () => document.body | | icon | Custom pop bubble Icon icon | ReactNode | | | motion | Whether there is animation when the drop-down list appears/hidden. You can customize animation by passing in an object that conforms to the structure | boolean\|object | true | | position | Directions, optional values: `top`, `topLeft`, `topRight`, `leftTop`, `leftBottom`, `rightTop`, `rightTop`, `rightBottom`, `bottomLeft`, `bottomRight`, `bottomRight` | string | "bottomLeft" | | okText | Confirm button text | string | "Confirm" | | okType | Confirm button type | string | "primary" | | okButtonProps | Confirm button props | object | | **0.29.0** | | showArrow | Whether to show arrow triangle | boolean | false | | | stopPropagation | Whether to prevent the click event on the bomb layer from bubbling | boolean | true | **0.34.0** | | position | Popup layer position,Optional value:`top`,`topLeft`,`topRight`,`left`,`leftTop`,`leftBottom`,
`right`,`rightTop`,`rightBottom`,`bottom`,`bottomLeft`,`bottomRight` | string | "bottomLeft" | | title | Displayed title | string\|ReactNode | | | trigger | Timing to trigger the display, optional value:hover / focus / click / custom | string | 'click' | | visible | Whether the bubble box displays controlled attributes | boolean | | **0.19.0** | | zIndex | Floating layer z-index value | number | 1030 | | onConfirm | Click the confirmation button to call back. Promise support after v2.19 | (e) => void \| Promise | | | onCancel | Click the Cancel button to call back. Promise support after v2.19 | (e) => void \| Promise | | | onVisibleChange | Bubble box toggle shows hidden callbacks | (visible: boolean) => void | () => {} | **0.19.0** | | onClickOutSide | Callback when the pop-up layer is in the display state and the non-Children, non-floating layer inner area is clicked | (e: event) => void | | **2.1.0** | ## Design Tokens ## FAQ - **Why does the Popconfirm floating layer lose its width and wrap unexpectedly when the width is not enough near the screen border?** After Chromium 104, the wrapping rendering strategy when the width of the screen border text is not enough has changed. For details, see [issue #1022](https://github.com/DouyinFE/semi-design/issues/1022), the semi-side has been This problem was fixed in v2.17.0.