Skip to content

dialog 对话框

对话框组件是一种常见的用户界面组件,用于在应用程序中显示弹出窗口,以与用户进行交互或显示重要的信息。对话框通常用于提示用户关于操作确认、警告、错误信息、表单输入等。

Props参数

名称类型是否必传默认值描述
visibleboolean-是否显示
titleReactNode-标题内容
contentReactNode-对话框内容
更建议直接使用children进行传递
closeablebooleanfalse显示右上角关闭按钮,点击将触发 onCancel
okTextReactNode-确定文本
okColorstring-确定文字颜色
cancelboolean-是否显示取消
cancelTextReactNode-取消文本
cancelColorstring-取消文本颜色
footerReactNode | false-自定义底部

设为 false 时将不显示整个 footer 区域
okLoadingboolean-点击ok时是否显示loading
与onOk配合使用。设置为true时。onOk可以返回为一个Promise函数。
在函数执行期间。确定按钮会显示为一个loading状态

示例

tsx
import { memo, useState } from 'react'
import { View } from '@tarojs/components'
import MMDialog from '~/components/dialog'
import MMButton from '~/components/button'
import PageDemoBlock from '../_components/page-demo-block'
import MMPageContainer from '../_components/page-container'

const Component = () => {
  const [visible, setVisible] = useState(false)
  const [cusVisible, setCusVisible] = useState(false)
  const [asyVisible, setAsyVisible] = useState(false)
  const [cancelisible, setCancelVisible] = useState(false)
  const [customVisible, setCustomVisible] = useState(false)

  return (
    <MMPageContainer title="对话框">
      <PageDemoBlock title="基础使用">
        <MMButton onClick={() => setVisible(true)}>点击显示</MMButton>
        <MMDialog visible={visible} title="确认加入团队?" onOk={() => setVisible(false)} onCancel={() => setVisible(false)} />
      </PageDemoBlock>

      <PageDemoBlock title="自定义">
        <View>标题、按钮和按钮文本样式都可以修改</View>
        <MMButton onClick={() => setCusVisible(true)}>点击显示</MMButton>
        <MMDialog
          visible={cusVisible}
          title={
            <View>
              <View>一旦加入后不可解绑,</View>
              <View>确认同意该团队邀请?</View>
            </View>
          }
          okText="欣然接受"
          okColor="#F18300"
          cancelText="狠心拒绝"
          cancelColor="red"
          onOk={() => setCusVisible(false)}
          onCancel={() => setCusVisible(false)}
        />
      </PageDemoBlock>

      <PageDemoBlock title="异步关闭">
        <View>可以在点击确定时设置为异步处理</View>
        <MMButton onClick={() => setAsyVisible(true)}>点击显示</MMButton>
        <MMDialog
          visible={asyVisible}
          title="是否加入收藏"
          okLoading
          onOk={async () => {
            await new Promise<void>((resolve) => {
              setTimeout(() => {
                resolve()
                setAsyVisible(false)
              }, 1000)
            })
          }}
          onCancel={() => setAsyVisible(false)}
        >
          生命远不止连轴转和忙到极限,人类的体验远比这辽阔、丰富得多。
        </MMDialog>
      </PageDemoBlock>

      <PageDemoBlock title="不显示取消">
        <MMButton onClick={() => setCancelVisible(true)}>点击显示</MMButton>
        <MMDialog
          visible={cancelisible}
          title="这个弹窗不显示取消"
          cancel={false}
          onOk={() => setCancelVisible(false)}
          onCancel={() => setCancelVisible(false)}
        />
      </PageDemoBlock>

      <PageDemoBlock title="自定义底部">
        <MMButton onClick={() => setCustomVisible(true)}>点击显示</MMButton>
        <MMDialog
          visible={customVisible}
          title="这个弹窗不显示取消"
          footer={
            <MMButton block onClick={() => setCustomVisible(false)}>
              点击确定
            </MMButton>
          }
        />
      </PageDemoBlock>
    </MMPageContainer>
  )
}

const MMDialogPage = memo(Component)
export default MMDialogPage