This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
Button
A pressable button with multiple visual variants.
Recommended version:
~56.0.26
A pressable button that renders consistently across Android, iOS, and web. Supports filled, outlined, and text visual variants.
Installation
- 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.
Usage
import { Host, Button } from '@expo/ui';
export default function BasicButtonExample() {
return (
<Host matchContents>
<Button label="Press me" onPress={() => alert('Pressed!')} />
</Host>
);
}
Variants
Pick a visual variant with the variant prop.
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>
);
}
Custom content
Pass children for fully custom button contents. The label prop is ignored when children is provided.
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>
);
}
Disabled
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';
No API data file found, sorry!