Popconfirm 气泡确认框

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

何时使用#

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

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

API#

参数 说明 类型 默认值
placement 气泡框位置,可选 top/left/right/bottom topLeft/topRight/bottomLeft/bottomRight leftTop/leftBottom/rightTop/rightBottom string top
title 确认框的描述 React.Element
onConfirm 点击确认的回调 function
onCancel 点击取消的回调 function
onVisibleChange 显示隐藏的回调 function(visible)
okText 确认按钮文字 String 确定
cancelText 取消按钮文字 String 取消

代码演示

import { Popconfirm, message } from 'antd';

function confirm() {
  message.success('点击了确定');
}

function cancel() {
  message.error('点击了取消');
}

ReactDOM.render(
  <Popconfirm title="确定要删除这个任务吗?" onConfirm={confirm} onCancel={cancel}>
    <a href="#">删除</a>
  </Popconfirm>
, mountNode);

最简单的用法。

import { Popconfirm } from 'antd';

ReactDOM.render(
  <Popconfirm title="Are you sure?" okText="Yes" cancelText="No">
    <a href="#">Delete</a>
  </Popconfirm>
, mountNode);

设置 okText cancelText 以自定义按钮文字。

import { Popconfirm, message, Button } from 'antd';

const text = '确定要删除这个任务吗?';

function confirm() {
  message.info('点击了确定');
}

ReactDOM.render(<div>
  <div style={{ marginLeft: 60 }}>
    <Popconfirm placement="topLeft" title={text} onConfirm={confirm}>
      <Button>上左</Button>
    </Popconfirm>
    <Popconfirm placement="top" title={text} onConfirm={confirm}>
      <Button>上边</Button>
    </Popconfirm>
    <Popconfirm placement="topRight" title={text} onConfirm={confirm}>
      <Button>上右</Button>
    </Popconfirm>
  </div>
  <div style={{ width: 60, float: 'left' }}>
    <Popconfirm placement="leftTop" title={text} onConfirm={confirm}>
      <Button>左上</Button>
    </Popconfirm>
    <Popconfirm placement="left" title={text} onConfirm={confirm}>
      <Button>左边</Button>
    </Popconfirm>
    <Popconfirm placement="leftBottom" title={text} onConfirm={confirm}>
      <Button>左下</Button>
    </Popconfirm>
  </div>
  <div style={{ width: 60, marginLeft: 252 }}>
    <Popconfirm placement="rightTop" title={text} onConfirm={confirm}>
      <Button>右上</Button>
    </Popconfirm>
    <Popconfirm placement="right" title={text} onConfirm={confirm}>
      <Button>右边</Button>
    </Popconfirm>
    <Popconfirm placement="rightBottom" title={text} onConfirm={confirm}>
      <Button>右下</Button>
    </Popconfirm>
  </div>
  <div style={{ marginLeft: 60, clear: 'both' }}>
    <Popconfirm placement="bottomLeft" title={text} onConfirm={confirm}>
      <Button>下左</Button>
    </Popconfirm>
    <Popconfirm placement="bottom" title={text} onConfirm={confirm}>
      <Button>下边</Button>
    </Popconfirm>
    <Popconfirm placement="bottomRight" title={text} onConfirm={confirm}>
      <Button>下右</Button>
    </Popconfirm>
  </div>
</div>, mountNode);

位置有十二个方向。

import { Popconfirm, Switch, message } from 'antd';

let App = React.createClass({
  getInitialState() {
    return {
      visible: false,
      condition: true,   // 是否满足条件,不满足则弹出确认框
    };
  },
  changeCondition(value) {
    this.setState({ condition: value });
  },
  confirm() {
    this.setState({ visible: false });
    message.success('进行下一步操作. next step.');
  },
  cancel() {
    this.setState({ visible: false });
    message.error('点击了取消');
  },
  handleVisibleChange(visible) {
    if (!visible) {
      this.setState({ visible });
      return;
    }
    // 打开前进行判断
    console.log(this.state.condition);
    if (this.state.condition) {
      this.confirm();  // 直接执行下一步
    } else {
      this.setState({ visible });  // 进行确认
    }
  },
  render() {
    return (
      <div>
        <Popconfirm title="确定要删除这个任务吗?"
          visible={this.state.visible} onVisibleChange={this.handleVisibleChange}
          onConfirm={this.confirm} onCancel={this.cancel}>
          <a href="#">删除某任务</a>
        </Popconfirm>
        <br />
        <br />
        点击是否直接执行:<Switch defaultChecked onChange={this.changeCondition} />
      </div>
    );
  }
});

ReactDOM.render(<App />, mountNode);

可以判断是否需要弹出。