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.

Button

具有多种视觉变体的可按压按钮

Android
iOS
Web
Included in Expo Go
Recommended version:
~58.0.1

一个可按下的按钮,在 Android、iOS 和 web 上均能保持一致的呈现效果。支持 filled、outlined 和 text 视觉变体。

展示 Material 3 强调层级的 filled、outlined 和 text 按钮展示 Material 3 强调层级的 filled、outlined 和 text 按钮

安装

Terminal
- npx expo install @expo/ui
- yarn expo install @expo/ui
- pnpm expo install @expo/ui
- bun expo install @expo/ui

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

用法

基本按钮

BasicButtonExample.tsx
import { Host, Button } from '@expo/ui'; export default function BasicButtonExample() { return ( <Host matchContents> <Button label="Press me" onPress={() => alert('Pressed!')} /> </Host> ); }

变体

使用 variant 属性选择视觉变体。

ButtonVariantsExample.tsx
import { Host, Column, Button } from '@expo/ui'; export default function ButtonVariantsExample() { return ( <Host matchContents> <Column spacing={8}> <Button variant="filled" label="Filled" onPress={() => {}} /> <Button variant="outlined" label="Outlined" onPress={() => {}} /> <Button variant="text" label="Text" onPress={() => {}} /> </Column> </Host> ); }

自定义内容

传入 children 可自定义按钮内容。提供 children 时会忽略 label 属性。

CustomButtonExample.tsx
import { Host, Button, Row, Icon, Text } from '@expo/ui'; export default function CustomButtonExample() { return ( <Host matchContents> <Button onPress={() => {}}> <Row spacing={6} alignment="center"> <Icon name={Icon.select({ ios: 'star.fill', android: require('@expo/material-symbols/star.xml'), })} size={16} color="#FFFFFF" /> <Text textStyle={{ color: '#FFFFFF' }}>Favorite</Text> </Row> </Button> </Host> ); }

已禁用

DisabledButtonExample.tsx
import { Host, Button } from '@expo/ui'; export default function DisabledButtonExample() { return ( <Host matchContents> <Button label="Disabled" onPress={() => {}} disabled /> </Host> ); }

API

import { Button } from '@expo/ui';

Component

Button

Android
iOS
Web

Type: React.Element<ButtonProps>

A pressable button that supports multiple visual variants.

Props for the Button component.

ButtonProps

children

Android
iOS
Web
Optional • Type: ReactNode

Custom content rendered inside the button. When provided, label is ignored.

disabled

Android
iOS
Web
Optional • Type: boolean

Whether the component is disabled. Disabled components do not respond to user interaction.

hidden

Android
iOS
Web
Optional • Type: boolean

Whether the component is hidden.

label

Android
iOS
Web
Optional • Type: string

Text label displayed inside the button. Ignored when children is provided.

modifiers

Android
iOS
Optional • Type: ModifierConfig[]

Platform-specific modifier escape hatch. Pass an array of modifier configs from @expo/ui/swift-ui/modifiers or @expo/ui/jetpack-compose/modifiers. A modifier supplied here replaces any modifier of the same type that the component derives from style or other props.

onAppear

Android
iOS
Web
Optional • Type: () => void

Called when the component appears on screen.

onDisappear

Android
iOS
Web
Optional • Type: () => void

Called when the component is removed from screen.

onPress

Android
iOS
Web
Optional • Type: () => void

Called when the button is pressed.

style

Android
iOS
Web
Optional • Type: Pick<ViewStyle, 'padding' | 'paddingHorizontal' | 'paddingVertical' | 'paddingTop' | 'paddingBottom' | 'paddingLeft' | 'paddingRight' | 'backgroundColor' | 'borderRadius' | 'borderWidth' | 'borderColor' | 'opacity' | 'width' | 'height'>

Platform-agnostic style properties. These are translated to SwiftUI modifiers on iOS and Jetpack Compose modifiers on Android.

testID

Android
iOS
Web
Optional • Type: string

Identifier used to locate the component in end-to-end tests.

variant

Android
iOS
Web
Optional • Type: ButtonVariant • Default: 'filled'

Visual variant of the button.

Types

ButtonVariant

Android
iOS
Web

Literal type: string

Visual variant of a Button.

  • 'filled' — solid background color (default).
  • 'outlined' — transparent background with a border.
  • 'text' — no background or border, text only.

Acceptable values are: 'filled' | 'outlined' | 'text'