• Vant React

Dialog 弹出框

介绍

弹出模态框,常用于消息提示、消息确认,或在当前页面内完成特定的交互操作,支持函数调用和组件调用两种方式。

函数调用

由于小程序不支持 DOM 操作,因此需要手动在页面(page)里挂载一个 Dialog 组件并指定 id 为 dialog

function ImperativeDialog() {
  return (
    <>
      <Dialog id="dialog" />
      <Cell
        title="提示弹窗"
        clickable
        bordered
        isLink
        onClick={() => Dialog.alert("提示")}
      />
    </>
  )
}

组件调用

通过组件组合的方式调用 Dialog。

function TextDialog() {
  const [open, setOpen] = useState(false)
  return (
    <>
      <Cell
        title="提示弹窗"
        clickable
        bordered
        isLink
        onClick={() => setOpen(true)}
      />
      <Dialog open={open} onClose={setOpen}>
        <Dialog.Content>提示</Dialog.Content>
        <Dialog.Actions>
          <Button onClick={() => setOpen(false)}>确认</Button>
        </Dialog.Actions>
      </Dialog>
    </>
  )
}

代码演示

消息提示

用于提示一些消息,只包含一个确认按钮。

function BasicDialog() {
  const [open, setOpen] = useState(false)
  return (
    <>
      <Cell
        title="提示弹窗"
        clickable
        bordered
        isLink
        onClick={() => setOpen(true)}
      />
      <Dialog open={open} onClose={setOpen}>
        <Dialog.Header>标题</Dialog.Header>
        <Dialog.Content>代码是写出来给人看的,附带能在机器上运行</Dialog.Content>
        <Dialog.Actions>
          <Button onClick={() => setOpen(false)}>确认</Button>
        </Dialog.Actions>
      </Dialog>
    </>
  )
}

消息确认

用于确认消息,包含取消和确认按钮。

function ConfirmDialog() {
  const [open, setOpen] = useState(false)
  return (
    <>
      <Cell
        title="确认弹窗"
        clickable
        bordered
        isLink
        onClick={() => setOpen(true)}
      />
      <Dialog open={open} onClose={setOpen}>
        <Dialog.Header>标题</Dialog.Header>
        <Dialog.Content>代码是写出来给人看的,附带能在机器上运行</Dialog.Content>
        <Dialog.Actions>
          <Button onClick={() => setOpen(false)}>取消</Button>
          <Button onClick={() => setOpen(false)}>确认</Button>
        </Dialog.Actions>
      </Dialog>
    </>
  )
}

圆角按钮风格

将 actions.variant 选项设置为 rounded 可以展示圆角按钮风格的弹窗。

function RoundedDialog() {
  const [open, setOpen] = useState(false)
  return (
    <>
      <Cell
        title="提示弹窗"
        clickable
        bordered
        isLink
        onClick={() => setOpen(true)}
      />
      <Dialog open={open} onClose={setOpen}>
        <Dialog.Header>标题</Dialog.Header>
        <Dialog.Content>代码是写出来给人看的,附带能在机器上运行</Dialog.Content>
        <Dialog.Actions variant="rounded">
          <Button onClick={() => setOpen(false)}>取消</Button>
          <Button onClick={() => setOpen(false)}>确认</Button>
        </Dialog.Actions>
      </Dialog>
    </>
  )
}

API

Dialog Props

参数说明类型默认值
defaultOpen默认是否显示弹窗boolean-
open是否显示弹窗boolean-
children组件内容ReactNode-

Dialog.Header Props

参数说明类型默认值
children标题内容ReactNode-

Dialog.Content Props

参数说明类型默认值
align文本对齐方式,可选值为 left rightstringcenter
children文本内容ReactNode-

Dialog.Actions Props

参数说明类型默认值
variant样式风格,可选值为 roundedstringdefault
children按钮内容ReactNode-

Dialog Options

参数说明类型默认值
selector自定义节点选择器stringtoast
className自定义类名string-
style自定义样式CSSProperties-
title标题ReactNode-
message文本内容,支持通过 \n 换行ReactNode-
messageAlign内容对齐方式,可选值为 left rightstringcenter
confirm确认按钮string | ButtonProps确认
cancel取消按钮string | ButtonProps取消
onConfirm确认事件() => void-
onCancel取消事件() => void-

Dialog Methods

方法名参数返回值介绍
Dialog.openoptions | message-展示弹窗
Dialog.alertoptions | message-展示消息提示弹窗
Dialog.confirmoptions | message-展示消息确认弹窗

主题定制

样式变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件。

名称默认值描述
—dialog-width320px * $hd-
—dialog-small-screen-width90%-
—dialog-font-sizevar(—font-size-lg)-
—dialog-transitionvar(—animation-duration-base)-
—dialog-border-radius16px * $hd-
—dialog-background-colorvar(—white)-
—dialog-header-font-weightvar(—font-weight-bold)-
—dialog-header-line-height24px * $hd-
—dialog-header-padding-top26px * $hd-
—dialog-header-isolated-paddingvar(—padding-lg) 0-
—dialog-message-padding26px * $hd var(—padding-lg)-
—dialog-message-font-sizevar(—font-size-md)-
—dialog-message-line-heightvar(—line-height-md)-
—dialog-message-max-height60vh-
—dialog-has-title-message-colorvar(—gray-7)-
—dialog-has-title-message-padding-topvar(—padding-xs)-
—dialog-button-height48px * $hd-
—dialog-confirm-button-colorvar(—red)-
—dialog-footer-rounded-paddingvar(—padding-xs) var(—padding-lg) var(—padding-md)-
—dialog-rounded-button-active-colorvar(—white)-
—dialog-rounded-button-font-sizevar(—font-size-md)-
—dialog-rounded-button-height36px * $hd-
—dialog-rounded-button-border-radiusvar(—border-radius-max)-
—dialog-rounded-confirm-button-background-colorvar(—gradient-red)-
—dialog-rounded-cancel-button-background-colorvar(—gradient-orange)-