--- id: bottomsheetflatlist title: BottomSheetFlatList description: a pre-integrated React Native FlatList with BottomSheet gestures. image: /img/bottom-sheet-preview.gif slug: /components/bottomsheetflatlist --- A pre-integrated `React Native` FlatList with `BottomSheet` gestures. ## Props Inherits `FlatListProps` from `react-native`. ### `focusHook` This needed when bottom sheet used with multiple scrollables to allow bottom sheet detect the current scrollable ref, especially when used with React Navigation. You will need to provide `useFocusEffect` from `@react-navigation/native`. | type | default | required | | -------- | ----------------- | -------- | | function | `React.useEffect` | NO | ## Ignored Props These props will be ignored if they were passed, because of the internal integration that uses them. - `scrollEventThrottle` - `decelerationRate` - `onScrollBeginDrag` ## Example ```tsx import React, { useCallback, useRef, useMemo } from "react"; import { StyleSheet, View, Text, Button } from "react-native"; import BottomSheet, { BottomSheetFlatList } from "@gorhom/bottom-sheet"; const App = () => { // hooks const sheetRef = useRef(null); // variables const data = useMemo( () => Array(50) .fill(0) .map((_, index) => `index-${index}`), [] ); const snapPoints = useMemo(() => ["25%", "50%", "90%"], []); // callbacks const handleSheetChange = useCallback((index) => { console.log("handleSheetChange", index); }, []); const handleSnapPress = useCallback((index) => { sheetRef.current?.snapToIndex(index); }, []); const handleClosePress = useCallback(() => { sheetRef.current?.close(); }, []); // render const renderItem = useCallback( ({ item }) => ( {item} ), [] ); return (