# Components Reference Native UI components, media, visual effects, and storage patterns for Expo/React Native. ## Images ```tsx import { Image } from "expo-image"; // Always use expo-image — not React Native's built-in Image ``` ## Lists ```tsx import { FlashList } from "@shopify/flash-list"; import { memo } from "react"; const Item = memo(({ title }: { title: string }) => ( {title} )); } keyExtractor={(item) => item.id} estimatedItemSize={80} /> ``` ## Safe Areas ```tsx import { useSafeAreaInsets } from "react-native-safe-area-context"; // With ScrollView {/* content */} // Manual insets const insets = useSafeAreaInsets(); ``` ## Native Controls (iOS) ```tsx import { Switch } from "react-native"; import SegmentedControl from "@react-native-segmented-control/segmented-control"; // Switch // Segmented Control setSelectedIndex(e.nativeEvent.selectedSegmentIndex)} /> ``` ## Form Sheets (Bottom Sheet) ```tsx // app/modal.tsx import { Stack } from "expo-router"; ``` ## Visual Effects ```tsx import { BlurView } from "expo-blur"; // Liquid glass (iOS 26+, New Architecture only) import { GlassEffect } from "expo-glass-effect"; ``` ## Search ```tsx // Using expo-router search bar (iOS only) import { useNavigation } from "expo-router"; useEffect(() => { navigation.setOptions({ headerSearchBarOptions: { placeholder: "Search...", onChangeText: (e) => setQuery(e.nativeEvent.text), }, }); }, [navigation]); ``` ## Storage | Need | Solution | |------|----------| | Structured data | `expo-sqlite` | | Simple key-value | `@react-native-async-storage/async-storage` | | Sensitive data | `expo-secure-store` | ## Media ```tsx import { CameraView, useCameraPermissions } from "expo-camera"; import { useAudioPlayer } from "expo-audio"; import { useVideoPlayer, VideoView } from "expo-video"; import * as ImagePicker from "expo-image-picker"; ```