FlatList React Native का मुख्य घटक है जो तत्वों के वर्चुअलाइजेशन के साथ उच्च-प्रदर्शन सूचियाँ प्रदर्शित करने के लिए है। ScrollView के विपरीत, FlatList केवल दृश्यमान स्क्रीन तत्वों को रेंडर करता है, मेमोरी और CPU बचाता है। घटक क्षैतिज और ऊर्ध्वाधर स्क्रॉलिंग, पुल-टू-रिफ्रेश और अनंत लोडिंग का समर्थन करता है। सूची आर्किटेक्चर के बारे में और पढ़ें Meta के दस्तावेज़ में।
मुख्य बिंदु
FlatList एक React Native घटक है जो बड़े डेटा सेट के उच्च-प्रदर्शन रेंडरिंग के साथ वर्चुअलाइज़्ड सूची लागू करता है। घटक VirtualizedList के ऊपर बनाया गया है और किसी भी जटिलता की सपाट सूचियाँ बनाने के लिए घोषणात्मक API प्रदान करता है।
FlatList को React Native 0.43 में पुराने ListView के प्रतिस्थापन के रूप में पेश किया गया था। Meta (2026) के अनुसार, FlatList का उपयोग सूचियों के साथ काम करने वाले 85% React Native अनुप्रयोगों में होता है। घटक सभी सामान्य परिदृश्यों का समर्थन करता है: संपर्क, समाचार फ़ीड, उत्पाद सूची और चैट।
FlatList से पहले, डेवलपर्स ListView का उपयोग करते थे, जिसके लिए मैन्युअल सेल पुन: उपयोग कॉन्फ़िगरेशन की आवश्यकता होती थी। FlatList ने Android में RecyclerView (2014) और iOS में UICollectionView (2012) के समान विंडोड रेंडरिंग लागू करके इस प्रक्रिया को स्वचालित किया। आधुनिक परियोजनाओं में, FlatList किसी भी सूची के लिए डी-फैक्टो मानक है।
FlatList वर्चुअलाइजेशन एक तंत्र है जहाँ घटक केवल उन तत्वों को रेंडर करता है जो दृश्यमान स्क्रीन क्षेत्र में आते हैं, साथ ही प्रत्येक तरफ एक छोटा बफर। शेष तत्व DOM में नहीं बनाए जाते, जिससे मेमोरी बचती है और रेंडरिंग तेज़ होती है।
स्क्रॉल करते समय, FlatList पहले से बनाई गई View कोशिकाओं का पुन: उपयोग करता है, उनमें डेटा बदलता है। यह 10,000 तत्वों की सूची के लिए हजारों Views बनाने से रोकता है। डिफ़ॉल्ट बफर आकार दृश्यमान क्षेत्र के ऊपर और नीचे 10 तत्व है, लेकिन इसे windowSize के माध्यम से कॉन्फ़िगर किया जा सकता है।
| पैरामीटर | डिफ़ॉल्ट | विवरण |
|---|---|---|
| windowSize | 21 | रेंडर करने के लिए पृष्ठों की संख्या (1 पृष्ठ = स्क्रीन ऊँचाई) |
| initialNumToRender | 10 | पहले रेंडर पर तत्वों की संख्या |
| maxToRenderPerBatch | 10 | प्रति बैच रेंडर किए जाने वाले अधिकतम तत्व |
| removeClippedSubviews | false | स्क्रीन के बाहर के Views को पदानुक्रम से हटाएँ |
इन मापदंडों का इष्टतम कॉन्फ़िगरेशन स्क्रॉल सहजता और मेमोरी खपत के बीच संतुलन बनाने की अनुमति देता है। बड़े तत्वों वाली सूचियों के लिए, windowSize को 5-7 तक कम करने की अनुशंसा की जाती है।
FlatList API में सूची प्रदर्शन और व्यवहार को कॉन्फ़िगर करने के लिए प्रॉप्स का एक सेट शामिल है। दो अनिवार्य प्रॉप्स हैं data (डेटा सरणी) और renderItem (तत्व रेंडरिंग फ़ंक्शन)। keyExtractor प्रत्येक तत्व के लिए अद्वितीय कुंजी प्रदान करके प्रदर्शन में सुधार करता है।
import React from 'react';
import { FlatList, View, Text, StyleSheet } from 'react-native';
const App = () => {
const data = Array.from({ length: 100 }, (_, i) => ({
id: i.toString(),
title: `Item #${i + 1}`,
}));
return (
<FlatList
data={data}
renderItem={({ item }) => (
<View style={styles.item}>
<Text>{item.title}</Text>
</View>
)}
keyExtractor={item => item.id}
ItemSeparatorComponent={() => <View style={styles.separator} />}
/>
);
};ItemSeparatorComponent तत्वों के बीच विभाजक जोड़ता है, ListHeaderComponent और ListFooterComponent सूची में हेडर और फ़ुटर जोड़ते हैं। यह अतिरिक्त रैपर के बिना जटिल लेआउट बनाने की अनुमति देता है।
const styles = StyleSheet.create({
item: {
padding: 16,
backgroundColor: '#fff',
borderBottomWidth: 1,
borderBottomColor: '#e0e0e0',
},
separator: {
height: 1,
backgroundColor: '#ccc',
},
});FlatList अनुकूलन सैकड़ों और हजारों तत्वों वाले अनुप्रयोगों के लिए महत्वपूर्ण है। सही कॉन्फ़िगरेशन के बिना, सूची स्क्रॉल करते समय धीमी हो सकती है, अत्यधिक मेमोरी खपत कर सकती है, और कमजोर उपकरणों पर क्रैश का कारण बन सकती है।
पहला नियम अद्वितीय और स्थिर पहचानकर्ताओं के साथ keyExtractor का उपयोग करना है। इंडेक्स को कुंजी के रूप में उपयोग करने से गलत सेल पुन: उपयोग और स्थिति संबंधी बग होते हैं। दूसरा नियम renderItem को useCallback में लपेटना और तत्व घटक के लिए React.memo का उपयोग करना है।
यदि सभी तत्वों की ऊँचाई समान है, तो getItemLayout FlatList को घटकों को मापे बिना स्क्रॉल स्थिति की गणना करने की अनुमति देता है। यह विशेष रूप से किसी विशिष्ट इंडेक्स पर स्क्रॉल करते समय महत्वपूर्ण प्रदर्शन लाभ प्रदान करता है।
const ITEM_HEIGHT = 80;
const getItemLayout = (data, index) => ({
length: ITEM_HEIGHT,
offset: ITEM_HEIGHT * index,
index,
});
<FlatList
data={data}
getItemLayout={getItemLayout}
renderItem={renderItem}
/FlatList>useMemo डेटा के लिए अनावश्यक पुनः रेंडरिंग को रोकता है। यदि डेटा API से आता है, तो इसे एक बार रूपांतरित करें और कैश करें। तत्व घटक के लिए React.memo का उपयोग करें ताकि अपरिवर्तित तत्वों को रेंडर करने से बचा जा सके।
क्षैतिज FlatList horizontal={true} प्रॉप जोड़कर बनाया जाता है। सूची स्क्रॉल दिशा को X अक्ष में बदल देती है, जो उत्पाद कैरोसेल, छवि गैलरी और क्षैतिज मेनू के लिए सुविधाजनक है।
क्षैतिज मोड में, देशी कैरोसेल की तरह चरण-दर-चरण स्क्रॉलिंग के लिए snapToInterval और snapToAlignment को सही ढंग से कॉन्फ़िगर करना महत्वपूर्ण है। घटक स्वचालित रूप से मोमेंटम और उंगली छोड़ने को संभालता है, निकटतम तत्व पर रुकता है।
<FlatList
horizontal
data={images}
renderItem={renderItem}
keyExtractor={item => item.id}
showsHorizontalScrollIndicator={false}
snapToInterval={CARD_WIDTH + GAP}
snapToAlignment="start"
decelerationRate="fast"
pagingEnabled
onViewableItemsChanged={onViewableItemsChanged}
/>onViewableItemsChanged एक कॉलबैक है जो दृश्यमान तत्वों के बदलने पर ट्रिगर होता है। इसका उपयोग एनालिटिक्स, लेज़ी इमेज लोडिंग और केवल दृश्यमान कार्ड के लिए वीडियो सक्रिय करने के लिए किया जाता है।
पुल-टू-रिफ्रेश FlatList में refreshing और onRefresh प्रॉप्स के माध्यम से लागू किया जाता है, जो लोडिंग स्थिति के साथ मिलकर काम करते हैं। सूची को नीचे खींचने पर onRefresh कॉल होता है, और refreshing फ़्लैग बार-बार कॉल को रोकता है।
अनंत स्क्रॉल onEndReached के माध्यम से कॉन्फ़िगर किया जाता है — एक कॉलबैक जो सूची के अंत के पास पहुँचने पर ट्रिगर होता है। onEndReachedThreshold निर्धारित करता है कि अंत से कितने तत्व पहले इवेंट फायर होता है। आमतौर पर कर्सर-आधारित पेजिनेशन का उपयोग किया जाता है।
const ListWithPagination = () => {
const [data, setData] = React.useState([]);
const [page, setPage] = React.useState(1);
const [refreshing, setRefreshing] = React.useState(false);
const loadMore = React.useCallback(async () => {
const newData = await fetchPage(page);
setData(prev => [...prev, ...newData]);
setPage(p => p + 1);
}, [page]);
return (
<FlatList
data={data}
renderItem={renderItem}
keyExtractor={item => item.id}
refreshing={refreshing}
onRefresh={loadMore}
onEndReached={loadMore}
onEndReachedThreshold={0.5}
/>
);
};महत्वपूर्ण: onEndReached कई बार कॉल हो सकता है। पिछला अनुरोध पूरा होने तक बार-बार अनुरोधों को रोकने के लिए isLoading फ़्लैग जोड़ें। लोडिंग इंगित करने के लिए ListFooterComponent में ActivityIndicator का उपयोग करें।
अक्सर पूछे जाने वाले प्रश्न
FlatList वर्चुअलाइजेशन का उपयोग करता है — केवल दृश्यमान तत्वों को रेंडर करता है, बड़े डेटा सेट के साथ मेमोरी बचाता है। ScrollView सभी चाइल्ड तत्वों को एक साथ रेंडर करता है, केवल 20-30 तत्वों की छोटी सूचियों के लिए उपयुक्त है। FlatList 100+ तत्वों के लिए इष्टतम है।
डेटा सरणी के संदर्भ में बदलाव होने पर फ्लैशिंग होती है। extraData का उपयोग करके निर्भरता पास करें, या renderItem को React.memo में लपेटें। पूर्ण नियंत्रण के लिए, डेटा संदर्भों को स्थिर करने के लिए useMemo का उपयोग करें।
FlatList जेस्चर विरोध के कारण ScrollView के अंदर नेस्ट करने के लिए डिज़ाइन नहीं किया गया है। समाधान: nestedScrollEnabled (Android) के साथ FlatList का उपयोग करें, अनुभागों के लिए SectionList, या ListHeaderComponent के माध्यम से बाहरी स्क्रॉलिंग को FlatList में ले जाएँ।
इंडेक्स के आधार पर देरी के साथ renderItem के अंदर Animated API का उपयोग करें। स्क्रॉल करते समय, एनिमेशन ट्रिगर करने के लिए onViewableItemsChanged का उपयोग करें। react-native-reanimated और react-native-lottie लाइब्रेरीज़ जटिल प्रकटन एनिमेशन बनाने को सरल बनाती हैं।
VirtualizedList मूल वर्चुअलाइजेशन घटक है जिस पर FlatList और SectionList बनाए गए हैं। FlatList, VirtualizedList का एक रैपर है जो सपाट सूचियों के लिए सरलीकृत API प्रदान करता है। VirtualizedList निम्न-स्तरीय नियंत्रण प्रदान करता है लेकिन शायद ही कभी सीधे उपयोग किया जाता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें