This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
This is documentation for the next SDK version. For up-to-date documentation, see the latest version (SDK 57).
Collapsible
A labelled tappable header that toggles visibility of its content.
Collapsible is a primitive that shows or hides its content with a tap on a labelled header. Controlled via isOpen and onOpenChange — each Collapsible manages independent state.
Installation
- npx expo install @expo/uiIf you are installing this in an existing React Native app, make sure to install expo in your project.
Usage
Basic collapsible
import { useState } from 'react'; import { Host, Column, Collapsible, Text } from '@expo/ui'; export default function CollapsibleExample() { const [open, setOpen] = useState(false); return ( <Host style={{ flex: 1 }}> <Column spacing={8} style={{ padding: 16 }}> <Collapsible isOpen={open} onOpenChange={setOpen} label="About"> <Text> A primitive that toggles visibility of its content via a labelled tappable header. </Text> </Collapsible> </Column> </Host> ); }
Accordion (one section open at a time)
Wire each Collapsible's isOpen to a shared parent value. The component doesn't enforce exclusivity — composition is up to the consumer.
import { useState } from 'react'; import { Host, Column, Collapsible, Text } from '@expo/ui'; type Section = 'a' | 'b' | 'c' | null; export default function CollapsibleAccordionExample() { const [openSection, setOpenSection] = useState<Section>('a'); return ( <Host style={{ flex: 1 }}> <Column spacing={8} style={{ padding: 16 }}> <Collapsible isOpen={openSection === 'a'} onOpenChange={open => setOpenSection(open ? 'a' : null)} label="Section A"> <Text>Opening B or C closes this one.</Text> </Collapsible> <Collapsible isOpen={openSection === 'b'} onOpenChange={open => setOpenSection(open ? 'b' : null)} label="Section B"> <Text>Opening A or C closes this one.</Text> </Collapsible> <Collapsible isOpen={openSection === 'c'} onOpenChange={open => setOpenSection(open ? 'c' : null)} label="Section C"> <Text>Opening A or B closes this one.</Text> </Collapsible> </Column> </Host> ); }
API
import { Collapsible } from '@expo/ui';
Component
Type: React.Element<CollapsibleProps>
A primitive that toggles visibility of its content via a labelled tappable
header. Controlled via isOpen + onOpenChange.
Props for the Collapsible component, a primitive that
shows or hides its content with a tap on a labelled header.
{
color: string,
fontFamily: string,
fontSize: number,
fontWeight: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900',
letterSpacing: number,
lineHeight: number,
textAlign: 'center' | 'left' | 'right'
}Text-specific styling for the tappable header label.