FlatList: Was es ist, API und Optimierung in React Native

Autor: IT Sectr Veröffentlicht: 2026-07-05 Lesezeit: 10 Min.

FlatList ist die Hauptkomponente von React Native zur Anzeige leistungsstarker Listen mit Elementvirtualisierung. Im Gegensatz zu ScrollView rendert FlatList nur die sichtbaren Bildschirmelemente und spart so Speicher und CPU. Die Komponente unterstützt horizontales und vertikales Scrollen, Pull-to-Refresh und unendliches Laden. Lesen Sie mehr über die Listenarchitektur in der Meta-Dokumentation.

Wichtige Punkte

  • FlatList ist eine virtualisierte Listenkomponente, die nur sichtbare Elemente rendert und sie beim Scrollen wiederverwendet
  • Leistung wird durch Fenster-Rendering erreicht — Elemente außerhalb des Bildschirms werden nicht erstellt
  • API umfasst renderItem, keyExtractor, ItemSeparatorComponent, ListHeaderComponent und ListFooterComponent
  • Horizontale Listen werden über das horizontal-Flag konfiguriert und ändern die Scrollrichtung auf die X-Achse
  • Optimierung erfordert die richtige Konfiguration von keyExtractor, useMemo für Daten und getItemLayout für feste Größen

Was ist FlatList?

FlatList ist eine React Native-Komponente, die eine virtualisierte Liste mit leistungsstarkem Rendering großer Datenmengen implementiert. Die Komponente ist auf VirtualizedList aufgebaut und bietet eine deklarative API zum Erstellen flacher Listen beliebiger Komplexität.

FlatList wurde in React Native 0.43 als Ersatz für die veraltete ListView eingeführt. Laut Meta (2026) wird FlatList in 85% der React Native-Anwendungen verwendet, die mit Listen arbeiten. Die Komponente unterstützt alle gängigen Szenarien: Kontakte, Nachrichtenfeeds, Produktkataloge und Chats.

Geschichte und Platz im Ökosystem

Vor FlatList verwendeten Entwickler ListView, das eine manuelle Konfiguration der Wiederverwendung von Zellen erforderte. FlatList automatisierte diesen Prozess durch die Implementierung von Fenster-Rendering ähnlich wie RecyclerView in Android (2014) und UICollectionView in iOS (2012). In modernen Projekten ist FlatList der De-facto-Standard für jede Liste.

Wie FlatList-Virtualisierung funktioniert

FlatList-Virtualisierung ist ein Mechanismus, bei dem die Komponente nur die Elemente rendert, die in den sichtbaren Bildschirmbereich fallen, plus einen kleinen Puffer auf jeder Seite. Die restlichen Elemente werden nicht im DOM erstellt, was Speicher spart und das Rendern beschleunigt.

Beim Scrollen verwendet FlatList bereits erstellte View-Zellen wieder, indem es deren Daten ersetzt. Dadurch wird verhindert, dass für eine Liste mit 10.000 Elementen Tausende von Views erstellt werden. Die Standard-Puffergröße beträgt 10 Elemente über und unter dem sichtbaren Bereich, ist aber über windowSize konfigurierbar.

ParameterStandardBeschreibung
windowSize21Anzahl der zu rendernden Seiten (1 Seite = Bildschirmhöhe)
initialNumToRender10Anzahl der Elemente beim ersten Rendern
maxToRenderPerBatch10Maximale Anzahl pro Batch gerenderter Elemente
removeClippedSubviewsfalseViews außerhalb des Bildschirms aus der Hierarchie entfernen

Die optimale Konfiguration dieser Parameter ermöglicht eine Balance zwischen Scroll-Glätte und Speicherverbrauch. Für Listen mit großen Elementen wird empfohlen, windowSize auf 5-7 zu reduzieren.

FlatList-API und wichtigste Props

FlatList-API umfasst eine Reihe von Props zur Konfiguration der Listendarstellung und des Verhaltens. Die beiden erforderlichen Props sind data (Daten-Array) und renderItem (Element-Rendering-Funktion). keyExtractor verbessert die Leistung, indem es einen eindeutigen Schlüssel für jedes Element bereitstellt.

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 fügt einen Trenner zwischen Elementen hinzu, ListHeaderComponent und ListFooterComponent fügen Kopf- und Fußzeile zur Liste hinzu. Dies ermöglicht komplexe Layouts ohne zusätzliche Wrapper.

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

FlatList-Leistungsoptimierung

FlatList-Optimierung ist für Anwendungen mit Hunderten und Tausenden von Elementen entscheidend. Ohne richtige Konfiguration kann die Liste beim Scrollen träge werden, übermäßig Speicher verbrauchen und auf schwachen Geräten abstürzen.

Die erste Regel ist die Verwendung von keyExtractor mit eindeutigen und stabilen Identifikatoren. Die Verwendung von Indizes als Schlüssel führt zu falscher Zellenwiederverwendung und Zustandsfehlern. Die zweite Regel ist, renderItem in useCallback zu wrappen und React.memo für die Elementkomponente zu verwenden.

getItemLayout für feste Höhe

Wenn alle Elemente dieselbe Höhe haben, ermöglicht getItemLayout FlatList, die Scrollposition ohne Messung von Komponenten zu berechnen. Dies bringt einen erheblichen Leistungsschub, besonders beim Scrollen zu einem bestimmten Index.

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 für Daten verhindert unnötige Neuerenderungen. Wenn Daten von einer API kommen, transformieren Sie sie einmal und cachen Sie sie. Verwenden Sie React.memo für die Elementkomponente, um das Rendern unveränderter Elemente zu vermeiden.

Horizontale Listen und Karussells

Horizontaler FlatList wird durch Hinzufügen der Prop horizontal={true} erstellt. Die Liste ändert die Scrollrichtung auf die X-Achse, was für Produktkarussells, Bildergalerien und horizontale Menüs praktisch ist.

Im horizontalen Modus ist es wichtig, snapToInterval und snapToAlignment für schrittweises Scrollen wie bei nativen Karussells richtig zu konfigurieren. Die Komponente verarbeitet automatisch Momentum und Fingerheben und stoppt am nächsten Element.

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 ist ein Callback, der bei Änderung sichtbarer Elemente ausgelöst wird. Es wird für Analysen, Lazy Loading von Bildern und Aktivierung von Videos nur für sichtbare Karten verwendet.

Pull-to-Refresh und unendliches Scrollen

Pull-to-Refresh wird in FlatList über die Props refreshing und onRefresh implementiert, die mit einem Ladestatus zusammenarbeiten. Beim Herunterziehen der Liste wird onRefresh aufgerufen, und das refreshing-Flag blockiert wiederholte Aufrufe.

Unendliches Scrollen wird über onEndReached konfiguriert — einen Callback, der beim Annähern an das Ende der Liste ausgelöst wird. onEndReachedThreshold bestimmt, wie viele Elemente vor dem Ende das Ereignis auslöst. Üblicherweise wird cursor-basierte Paginierung verwendet.

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}
    />
  );
};

Wichtig: onEndReached kann mehrfach aufgerufen werden. Fügen Sie ein isLoading-Flag hinzu, um wiederholte Anfragen zu blockieren, bis die vorherige abgeschlossen ist. Verwenden Sie ActivityIndicator in ListFooterComponent zur Anzeige des Ladens.

Häufig gestellte Fragen

Wie unterscheidet sich FlatList von ScrollView?

FlatList verwendet Virtualisierung — es rendert nur sichtbare Elemente und spart so Speicher bei großen Datenmengen. ScrollView rendert alle Kinder auf einmal, geeignet nur für kleine Listen mit 20-30 Elementen. FlatList ist optimal für 100+ Elemente.

Wie behebt man Flackern beim Aktualisieren von FlatList-Daten?

Flackern tritt auf, wenn sich die Referenz zum Daten-Array ändert. Verwenden Sie extraData mit der Abhängigkeit, oder wrappen Sie renderItem in React.memo. Für volle Kontrolle verwenden Sie useMemo, um Datenreferenzen zu stabilisieren.

Warum scrollt FlatList nicht innerhalb einer anderen Scroll-View?

FlatList ist aufgrund von Gestenkonflikten nicht für die Verschachtelung in ScrollView ausgelegt. Lösungen: Verwenden Sie FlatList mit nestedScrollEnabled (Android), SectionList für Abschnitte, oder verlagern Sie das externe Scrollen per ListHeaderComponent in FlatList.

Wie animiert man das Erscheinen von FlatList-Elementen?

Verwenden Sie die Animated API innerhalb von renderItem mit einer Verzögerung basierend auf dem Index. Beim Scrollen verwenden Sie onViewableItemsChanged, um Animationen auszulösen. Bibliotheken wie react-native-reanimated und react-native-lottie vereinfachen die Erstellung komplexer Erscheinungsanimationen.

Was ist VirtualizedList und wie hängt es mit FlatList zusammen?

VirtualizedList ist die Basis-Virtualisierungskomponente, auf der FlatList und SectionList aufbauen. FlatList ist ein Wrapper um VirtualizedList mit einer vereinfachten API für flache Listen. VirtualizedList bietet eine niedrigere Kontrollebene, wird aber selten direkt verwendet.

Zusammenfassung

  • FlatList ist die Hauptkomponente von React Native für leistungsstarke Listen mit automatischer Virtualisierung und Zellenwiederverwendung
  • Virtualisierung rendert nur sichtbare Elemente über windowSize und initialNumToRender, was Speicher bei großen Datenmengen spart
  • Erforderliche Props: data, renderItem und keyExtractor — gewährleisten den korrekten Listenbetrieb
  • getItemLayout beschleunigt das Scrollen für Elemente mit fester Höhe, indem dynamische Messung entfällt
  • Horizontale Listen und Karussells werden über horizontal und snapToInterval für schrittweises Scrollen konfiguriert
  • Pull-to-Refresh und onEndReached implementieren unendliches Laden mit Schutz vor wiederholten Aufrufen
  • React.memo und useCallback sind für renderItem obligatorisch — ohne sie löst jeder Scrollvorgang eine Neuerenderung aller Elemente aus

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch