# React Native Bottom Sheet React Native Bottom Sheet is a performant, interactive bottom sheet component for React Native applications with fully configurable options. Built on top of React Native Reanimated v3 and React Native Gesture Handler v2, it provides smooth gesture interactions, snapping animations, and seamless keyboard handling for both iOS and Android platforms. The library supports React Native Web, making it a cross-platform solution for implementing bottom sheet UIs. The library offers extensive customization through props, hooks, and component overrides. Key features include dynamic sizing that automatically calculates content height, support for scrollable content via pre-integrated FlatList, ScrollView, and SectionList components, modal presentation with stack behavior, pull-to-refresh support, and accessibility features. It is fully written in TypeScript and compatible with Expo, making it suitable for production applications requiring native-quality sheet interactions. ## Installation ```bash yarn add @gorhom/bottom-sheet@^5 react-native-reanimated react-native-gesture-handler ``` ## Basic Bottom Sheet Usage The BottomSheet component provides an interactive sheet that can be swiped and snapped to predefined positions. It supports dynamic content sizing and can contain any React Native content including scrollable views. ```tsx import React, { useCallback, useMemo, useRef } from 'react'; import { View, Text, StyleSheet } from 'react-native'; import { GestureHandlerRootView } from 'react-native-gesture-handler'; import BottomSheet, { BottomSheetView } from '@gorhom/bottom-sheet'; const App = () => { // ref const bottomSheetRef = useRef(null); // callbacks const handleSheetChanges = useCallback((index: number) => { console.log('handleSheetChanges', index); }, []); // renders return ( Awesome 🎉 ); }; const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: 'grey', }, contentContainer: { flex: 1, padding: 36, alignItems: 'center', }, }); export default App; ``` ## Bottom Sheet with Snap Points Configure specific snap points (positions) where the sheet can rest. Snap points can be specified as pixel values or percentages, and the sheet will animate smoothly between them when dragged. ```tsx import React, { useCallback, useRef, useMemo } from "react"; import { StyleSheet, View, Text, Button } from "react-native"; import { GestureHandlerRootView } from 'react-native-gesture-handler'; import BottomSheet, { BottomSheetView } from "@gorhom/bottom-sheet"; const App = () => { const sheetRef = useRef(null); const snapPoints = useMemo(() => ["25%", "50%", "90%"], []); const handleSheetChange = useCallback((index) => { console.log("handleSheetChange", index); }, []); const handleSnapPress = useCallback((index) => { sheetRef.current?.snapToIndex(index); }, []); const handleClosePress = useCallback(() => { sheetRef.current?.close(); }, []); return (