Reference version

This is documentation for the next SDK version. For up-to-date documentation, see the latest version (SDK 56).

Collapsible

A labelled tappable header that toggles visibility of its content.

Android
iOS
Web
Included in Expo Go

For the complete documentation index, see llms.txt. Use this file to discover all available pages.

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

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.

Usage

Basic collapsible

CollapsibleExample.tsx
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.

CollapsibleAccordionExample.tsx
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

Collapsible

Android
iOS
Web

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.

CollapsibleProps

children

Android
iOS
Web
Optional • Type: ReactNode

Content rendered when isOpen is true.

isOpen

Android
iOS
Web
Type: boolean

Whether the content is currently expanded.

label

Android
iOS
Web
Optional • Type: string

Text rendered in the tappable header.

onOpenChange

Android
iOS
Web
Type: (isOpen: boolean) => void

Called when the user taps the header to toggle the open state.