Reference version

This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.

确认对话框

一个用于展示确认提示的 SwiftUI ConfirmationDialog 组件。

iOS
tvOS
Included in Expo Go
Recommended version:
~57.0.0

Expo UI ConfirmationDialog 与官方 SwiftUI confirmationDialog API 保持一致,并提供一个类似操作表的对话框,包含标题、操作项以及可选消息。

ConfirmationDialog,要求用户确认一个破坏性操作

安装

Terminal
npx expo install @expo/ui

If you are installing this in an existing React Native app, make sure to install expo in your project.

用法

基本确认对话框

使用 ConfirmationDialog.Trigger 定义可见元素,使用 ConfirmationDialog.Actions 提供对话框按钮。

BasicConfirmationDialogExample.tsx
import { useState } from 'react'; import { Host, ConfirmationDialog, Button, Text } from '@expo/ui/swift-ui'; export default function BasicConfirmationDialogExample() { const [isPresented, setIsPresented] = useState(false); return ( <Host matchContents> <ConfirmationDialog title="你确定吗?" isPresented={isPresented} onIsPresentedChange={setIsPresented} titleVisibility="visible"> <ConfirmationDialog.Trigger> <Button label="显示对话框" onPress={() => setIsPresented(true)} /> </ConfirmationDialog.Trigger> <ConfirmationDialog.Actions> <Button label="确认" onPress={() => setIsPresented(false)} /> <Button label="取消" role="cancel" /> </ConfirmationDialog.Actions> </ConfirmationDialog> </Host> ); }

危险操作确认

ConfirmationDialog.Actions 内的 Button 上使用 role="destructive",将其样式设为危险操作。

DestructiveConfirmationDialogExample.tsx
import { useState } from 'react'; import { Host, ConfirmationDialog, Button, Text } from '@expo/ui/swift-ui'; export default function DestructiveConfirmationDialogExample() { const [isPresented, setIsPresented] = useState(false); return ( <Host matchContents> <ConfirmationDialog title="删除项目?" isPresented={isPresented} onIsPresentedChange={setIsPresented} titleVisibility="visible"> <ConfirmationDialog.Trigger> <Button label="删除" role="destructive" onPress={() => setIsPresented(true)} /> </ConfirmationDialog.Trigger> <ConfirmationDialog.Actions> <Button label="删除" role="destructive" onPress={() => { console.log('已删除'); setIsPresented(false); }} /> <Button label="取消" role="cancel" /> </ConfirmationDialog.Actions> <ConfirmationDialog.Message> <Text>此操作无法撤销。</Text> </ConfirmationDialog.Message> </ConfirmationDialog> </Host> ); }

带消息和多个操作

使用 ConfirmationDialog.Message 在标题下方显示说明性消息,并为不同选择包含多个操作按钮。

MultiActionConfirmationDialogExample.tsx
import { useState } from 'react'; import { Host, ConfirmationDialog, Button, Text } from '@expo/ui/swift-ui'; export default function MultiActionConfirmationDialogExample() { const [isPresented, setIsPresented] = useState(false); return ( <Host matchContents> <ConfirmationDialog title="保存更改?" isPresented={isPresented} onIsPresentedChange={setIsPresented} titleVisibility="visible"> <ConfirmationDialog.Trigger> <Button label="关闭文档" onPress={() => setIsPresented(true)} /> </ConfirmationDialog.Trigger> <ConfirmationDialog.Actions> <Button label="保存" onPress={() => console.log('已保存')} /> <Button label="放弃" role="destructive" onPress={() => console.log('已放弃')} /> <Button label="取消" role="cancel" /> </ConfirmationDialog.Actions> <ConfirmationDialog.Message> <Text>你有未保存的更改。你想怎么做?</Text> </ConfirmationDialog.Message> </ConfirmationDialog> </Host> ); }

隐藏标题

设置 titleVisibility="hidden" 可隐藏对话框标题,同时仍显示操作和消息。你仍应提供 title 以满足无障碍访问需求。

HiddenTitleConfirmationDialogExample.tsx
import { useState } from 'react'; import { Host, ConfirmationDialog, Button, Text } from '@expo/ui/swift-ui'; export default function HiddenTitleConfirmationDialogExample() { const [isPresented, setIsPresented] = useState(false); return ( <Host matchContents> <ConfirmationDialog title="隐藏标题" isPresented={isPresented} onIsPresentedChange={setIsPresented} titleVisibility="hidden"> <ConfirmationDialog.Trigger> <Button label="显示对话框" onPress={() => setIsPresented(true)} /> </ConfirmationDialog.Trigger> <ConfirmationDialog.Actions> <Button label="确定" onPress={() => setIsPresented(false)} /> <Button label="取消" role="cancel" /> </ConfirmationDialog.Actions> <ConfirmationDialog.Message> <Text>只有消息和操作可见。</Text> </ConfirmationDialog.Message> </ConfirmationDialog> </Host> ); }

API

import { ConfirmationDialog } from '@expo/ui/swift-ui';

Component

ConfirmationDialog

iOS
tvOS

Type: React.Element<ConfirmationDialogProps>

ConfirmationDialog presents a confirmation dialog with a title, optional message, and action buttons.

Props of the ConfirmationDialog component.

ConfirmationDialogProps

children

iOS
tvOS
Type: ReactNode

The contents of the confirmation dialog. Should include ConfirmationDialog.Trigger, ConfirmationDialog.Actions, and optionally ConfirmationDialog.Message.

isPresented

iOS
tvOS
Optional • Type: boolean

Whether the confirmation dialog is presented.

onIsPresentedChange

iOS
tvOS
Optional • Type: (isPresented: boolean) => void

A callback that is called when the isPresented state changes.

title

iOS
tvOS
Type: string

The title of the confirmation dialog.

titleVisibility

iOS
tvOS
Optional • Literal type: string • Default: 'automatic'

The visibility of the dialog title.

Acceptable values are: 'automatic' | 'hidden' | 'visible'