FlatList: यह क्या है, API और React Native में अनुकूलन

लेखक: IT Sectr प्रकाशित: 2026-07-05 पढ़ने का समय: 10 मिनट

FlatList React Native का मुख्य घटक है जो तत्वों के वर्चुअलाइजेशन के साथ उच्च-प्रदर्शन सूचियाँ प्रदर्शित करने के लिए है। ScrollView के विपरीत, FlatList केवल दृश्यमान स्क्रीन तत्वों को रेंडर करता है, मेमोरी और CPU बचाता है। घटक क्षैतिज और ऊर्ध्वाधर स्क्रॉलिंग, पुल-टू-रिफ्रेश और अनंत लोडिंग का समर्थन करता है। सूची आर्किटेक्चर के बारे में और पढ़ें Meta के दस्तावेज़ में

मुख्य बिंदु

  • FlatList एक वर्चुअलाइज़्ड सूची घटक है जो केवल दृश्यमान तत्वों को रेंडर करता है और स्क्रॉल करते समय उन्हें पुनः उपयोग करता है
  • प्रदर्शन विंडोड रेंडरिंग के माध्यम से प्राप्त होता है — स्क्रीन के बाहर के तत्व नहीं बनाए जाते
  • API में renderItem, keyExtractor, ItemSeparatorComponent, ListHeaderComponent और ListFooterComponent शामिल हैं
  • क्षैतिज सूचियाँ horizontal फ़्लैग के माध्यम से कॉन्फ़िगर की जाती हैं और स्क्रॉल दिशा को X अक्ष में बदलती हैं
  • अनुकूलन के लिए keyExtractor, डेटा के लिए useMemo और निश्चित आकारों के लिए getItemLayout की सही कॉन्फ़िगरेशन आवश्यक है

FlatList क्या है?

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 वर्चुअलाइजेशन कैसे काम करता है

FlatList वर्चुअलाइजेशन एक तंत्र है जहाँ घटक केवल उन तत्वों को रेंडर करता है जो दृश्यमान स्क्रीन क्षेत्र में आते हैं, साथ ही प्रत्येक तरफ एक छोटा बफर। शेष तत्व DOM में नहीं बनाए जाते, जिससे मेमोरी बचती है और रेंडरिंग तेज़ होती है।

स्क्रॉल करते समय, FlatList पहले से बनाई गई View कोशिकाओं का पुन: उपयोग करता है, उनमें डेटा बदलता है। यह 10,000 तत्वों की सूची के लिए हजारों Views बनाने से रोकता है। डिफ़ॉल्ट बफर आकार दृश्यमान क्षेत्र के ऊपर और नीचे 10 तत्व है, लेकिन इसे windowSize के माध्यम से कॉन्फ़िगर किया जा सकता है।

पैरामीटरडिफ़ॉल्टविवरण
windowSize21रेंडर करने के लिए पृष्ठों की संख्या (1 पृष्ठ = स्क्रीन ऊँचाई)
initialNumToRender10पहले रेंडर पर तत्वों की संख्या
maxToRenderPerBatch10प्रति बैच रेंडर किए जाने वाले अधिकतम तत्व
removeClippedSubviewsfalseस्क्रीन के बाहर के Views को पदानुक्रम से हटाएँ

इन मापदंडों का इष्टतम कॉन्फ़िगरेशन स्क्रॉल सहजता और मेमोरी खपत के बीच संतुलन बनाने की अनुमति देता है। बड़े तत्वों वाली सूचियों के लिए, windowSize को 5-7 तक कम करने की अनुशंसा की जाती है।

FlatList API और मुख्य प्रॉप्स

FlatList API में सूची प्रदर्शन और व्यवहार को कॉन्फ़िगर करने के लिए प्रॉप्स का एक सेट शामिल है। दो अनिवार्य प्रॉप्स हैं data (डेटा सरणी) और renderItem (तत्व रेंडरिंग फ़ंक्शन)। keyExtractor प्रत्येक तत्व के लिए अद्वितीय कुंजी प्रदान करके प्रदर्शन में सुधार करता है।

js
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 सूची में हेडर और फ़ुटर जोड़ते हैं। यह अतिरिक्त रैपर के बिना जटिल लेआउट बनाने की अनुमति देता है।

js
const styles = StyleSheet.create({
  item: {
    padding: 16,
    backgroundColor: '#fff',
    borderBottomWidth: 1,
    borderBottomColor: '#e0e0e0',
  },
  separator: {
    height: 1,
    backgroundColor: '#ccc',
  },
});

FlatList प्रदर्शन अनुकूलन

FlatList अनुकूलन सैकड़ों और हजारों तत्वों वाले अनुप्रयोगों के लिए महत्वपूर्ण है। सही कॉन्फ़िगरेशन के बिना, सूची स्क्रॉल करते समय धीमी हो सकती है, अत्यधिक मेमोरी खपत कर सकती है, और कमजोर उपकरणों पर क्रैश का कारण बन सकती है।

पहला नियम अद्वितीय और स्थिर पहचानकर्ताओं के साथ keyExtractor का उपयोग करना है। इंडेक्स को कुंजी के रूप में उपयोग करने से गलत सेल पुन: उपयोग और स्थिति संबंधी बग होते हैं। दूसरा नियम renderItem को useCallback में लपेटना और तत्व घटक के लिए React.memo का उपयोग करना है।

निश्चित ऊँचाई के लिए getItemLayout

यदि सभी तत्वों की ऊँचाई समान है, तो getItemLayout FlatList को घटकों को मापे बिना स्क्रॉल स्थिति की गणना करने की अनुमति देता है। यह विशेष रूप से किसी विशिष्ट इंडेक्स पर स्क्रॉल करते समय महत्वपूर्ण प्रदर्शन लाभ प्रदान करता है।

js
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 को सही ढंग से कॉन्फ़िगर करना महत्वपूर्ण है। घटक स्वचालित रूप से मोमेंटम और उंगली छोड़ने को संभालता है, निकटतम तत्व पर रुकता है।

js
<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 निर्धारित करता है कि अंत से कितने तत्व पहले इवेंट फायर होता है। आमतौर पर कर्सर-आधारित पेजिनेशन का उपयोग किया जाता है।

js
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 से कैसे अलग है?

FlatList वर्चुअलाइजेशन का उपयोग करता है — केवल दृश्यमान तत्वों को रेंडर करता है, बड़े डेटा सेट के साथ मेमोरी बचाता है। ScrollView सभी चाइल्ड तत्वों को एक साथ रेंडर करता है, केवल 20-30 तत्वों की छोटी सूचियों के लिए उपयुक्त है। FlatList 100+ तत्वों के लिए इष्टतम है।

FlatList डेटा अपडेट करते समय फ्लैशिंग कैसे ठीक करें?

डेटा सरणी के संदर्भ में बदलाव होने पर फ्लैशिंग होती है। extraData का उपयोग करके निर्भरता पास करें, या renderItem को React.memo में लपेटें। पूर्ण नियंत्रण के लिए, डेटा संदर्भों को स्थिर करने के लिए useMemo का उपयोग करें।

FlatList दूसरे स्क्रॉल व्यू के अंदर स्क्रॉल क्यों नहीं होता?

FlatList जेस्चर विरोध के कारण ScrollView के अंदर नेस्ट करने के लिए डिज़ाइन नहीं किया गया है। समाधान: nestedScrollEnabled (Android) के साथ FlatList का उपयोग करें, अनुभागों के लिए SectionList, या ListHeaderComponent के माध्यम से बाहरी स्क्रॉलिंग को FlatList में ले जाएँ।

FlatList तत्वों के प्रकटन को कैसे एनिमेट करें?

इंडेक्स के आधार पर देरी के साथ renderItem के अंदर Animated API का उपयोग करें। स्क्रॉल करते समय, एनिमेशन ट्रिगर करने के लिए onViewableItemsChanged का उपयोग करें। react-native-reanimated और react-native-lottie लाइब्रेरीज़ जटिल प्रकटन एनिमेशन बनाने को सरल बनाती हैं।

VirtualizedList क्या है और इसका FlatList से क्या संबंध है?

VirtualizedList मूल वर्चुअलाइजेशन घटक है जिस पर FlatList और SectionList बनाए गए हैं। FlatList, VirtualizedList का एक रैपर है जो सपाट सूचियों के लिए सरलीकृत API प्रदान करता है। VirtualizedList निम्न-स्तरीय नियंत्रण प्रदान करता है लेकिन शायद ही कभी सीधे उपयोग किया जाता है।

सारांश

  • FlatList React Native में स्वचालित वर्चुअलाइजेशन और सेल पुन: उपयोग के साथ उच्च-प्रदर्शन सूचियों के लिए मुख्य घटक है
  • वर्चुअलाइजेशन windowSize और initialNumToRender के माध्यम से केवल दृश्यमान तत्वों को रेंडर करता है, बड़े डेटा सेट पर मेमोरी बचाता है
  • अनिवार्य प्रॉप्स: data, renderItem और keyExtractor — सूची के सही संचालन को सुनिश्चित करते हैं
  • getItemLayout निश्चित ऊँचाई वाले तत्वों के लिए स्क्रॉलिंग को गति देता है, गतिशील माप को समाप्त करता है
  • क्षैतिज सूचियाँ और कैरोसेल चरण-दर-चरण स्क्रॉलिंग के लिए horizontal और snapToInterval के माध्यम से कॉन्फ़िगर की जाती हैं
  • पुल-टू-रिफ्रेश और onEndReached बार-बार कॉल से सुरक्षा के साथ अनंत लोडिंग लागू करते हैं
  • React.memo और useCallback renderItem के लिए अनिवार्य हैं — इनके बिना, प्रत्येक स्क्रॉल सभी तत्वों के पुनः रेंडर का कारण बनता है

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें