Infinite scrolling — load more data when reaching the end.
Basic implementation:
1import { useState, useCallback } from "react";2import { FlatList, ActivityIndicator } from "react-native";34function InfiniteList() {5 const [data, setData] = useState(initialData);6 const [loading, setLoading] = useState(false);7 const [hasMore, setHasMore] = useState(true);89 const loadMore = useCallback(async () => {10 if (loading || !hasMore) return;11 setLoading(true);12 const moreData = await fetchMoreData(data.length);13 setData(prev => [...prev, ...moreData]);14 setHasMore(moreData.length > 0);15 setLoading(false);16 }, [data, loading, hasMore]);1718 return (19 <FlatList20 data={data}21 renderItem={renderItem}22 keyExtractor={(item) => item.id}23 onEndReached={loadMore}24 onEndReachedThreshold={0.5}25 ListFooterComponent={26 loading ? <ActivityIndicator /> : null27 }28 />29 );30}
Key props:
onEndReached — callback when end is reached.onEndReachedThreshold — how early to trigger (0-1).ListFooterComponent — loading indicator.