# 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";
```