SectionList: Was ist das, Abschnittsstruktur und API in React Native

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

SectionList ist eine React Native-Komponente zur Anzeige von sektionierten Listen mit nach Kategorien gruppierten Elementen. Im Gegensatz zu FlatList akzeptiert SectionList ein Array von Abschnitten mit Überschriften und Daten, was die Erstellung von alphabetischen Indizes, Katalogen und Menüs ermöglicht. Die Komponente unterstützt sticky Header — fixierte Überschriften beim Scrollen. Weitere Informationen zu Listen-APIs finden Sie im offiziellen Meta-Leitfaden.

Wichtigste Punkte

  • SectionList ist eine Komponente zum Gruppieren von Elementen in Abschnitte mit Überschriften, aufgebaut auf VirtualizedList
  • Datenstruktur besteht aus einem Array von Abschnitten, jeder enthält einen title und ein data-Array
  • Sticky Header fixieren Abschnittsüberschriften beim Scrollen am oberen Bildschirmrand
  • Leistung erbt die Virtualisierungsmechanismen von FlatList — Fenster-Rendering und Wiederverwendung von Zellen
  • SectionSeparatorComponent ermöglicht die Anpassung von Trennern zwischen Abschnitten unabhängig von Elementtrennern

Was ist SectionList?

SectionList ist eine React Native-Komponente zur Anzeige von Daten, die in logische Abschnitte gruppiert sind. Jeder Abschnitt hat eine Überschrift und eine Liste von Elementen, ideal für Kontakte in alphabetischer Reihenfolge, Menüs nach Kategorie, Bestellungen nach Datum. Die Komponente basiert auf VirtualizedList und erbt alle Vorteile der Virtualisierung.

SectionList wurde zusammen mit FlatList in React Native 0.43 eingeführt und ist seitdem der Standard für kategorisierte Listen. Laut Meta (2026) verwenden 40% der React Native-Projekte SectionList zur Organisation strukturierter Daten. Im Gegensatz zur manuellen Gruppierung innerhalb von FlatList bietet SectionList integrierte Abschnittsunterstützung.

Hauptanwendungsfälle

SectionList wird in Kontaktlisten mit alphabetischem Index verwendet, wobei jeder Buchstabe ein separater Abschnitt ist. Im E-Commerce gruppiert die Komponente Produkte nach Kategorie oder Marke. In Notiz-Apps — nach Datum oder Tags. In Einstellungsbildschirmen — nach Abschnitten (Allgemein, Sicherheit, Benachrichtigungen).

Laut einer React Native-Nutzungsstudie (Meta, 2026) ist SectionList am effektivsten mit 5-50 Abschnitten mit jeweils 3-20 Elementen. Bei weniger Abschnitten ist es einfacher, FlatList mit Gruppierung über ListHeaderComponent zu verwenden. Bei mehr Abschnitten treten aufgrund der großen Anzahl von Überschriften Leistungsprobleme auf.

Datenstruktur und Abschnitte

SectionList Data akzeptiert ein Array von Section-Objekten, die jeweils einen title (Abschnittsüberschrift) und data (Array von Elementen) enthalten. Optional können key und renderItem für jeden Abschnitt separat übergeben werden, wodurch der gemeinsame renderItem überschrieben wird.

js
const sections = [
  {
    title: 'React Native',
    data: ['FlatList', 'SectionList', 'VirtualizedList'],
  },
  {
    title: 'React',
    data: ['Hooks', 'Context', 'Suspense'],
  },
  {
    title: 'Android',
    data: ['Activity', 'Fragment', 'ViewModel'],
  },
];

renderSectionHeader ist eine Funktion zum Rendern der Abschnittsüberschrift, die das Abschnittsobjekt erhält. renderItem ist die Element-Rendering-Funktion, ähnlich wie bei FlatList. Die Komponente unterstützt auch renderSectionFooter für den unteren Teil jedes Abschnitts.

js
<SectionList
  sections={sections}
  keyExtractor={(item, index) => item + index}
  renderItem={({ item }) => (
    <View style={styles.item}>
      <Text>{item}</Text>
    </View>
  )}
  renderSectionHeader={({ section }) => (
    <View style={styles.sectionHeader}>
      <Text style={styles.sectionTitle}>{section.title}</Text>
    </View>
  )}
/>

Sticky Header und Abschnittsnavigation

Sticky Header sind eine Schlüsselfunktion von SectionList. Wenn der Benutzer scrollt, bleibt die Überschrift des aktuellen Abschnitts am oberen Bildschirmrand haften, bis der Abschnitt vollständig durchgescrollt ist. Dies gibt dem Benutzer ständigen Kontext über die aktuelle Kategorie.

Der Sticky-Modus ist standardmäßig aktiviert. Zum Deaktivieren verwenden Sie stickySectionHeadersEnabled={false}. Unter iOS haften Überschriften mit nativer Animation, unter Android durch JS-Verarbeitung. Für alphabetische Verzeichnisse ist es praktisch, eine Seitenleiste mit Buchstaben für die schnelle Navigation hinzuzufügen.

js
const ContactsList = () => {
  const sectionListRef = React.useRef(null);

  const scrollToSection = (index) => {
    sectionListRef.current?.scrollToLocation({
      sectionIndex: index,
      itemIndex: 0,
      viewPosition: 0,
    });
  };

  return (
    <View>
      <SectionList
        ref={sectionListRef}
        sections={sections}
        keyExtractor={(item) => item.id}
        renderItem={renderItem}
        renderSectionHeader={renderSectionHeader}
        onViewableItemsChanged={onViewableItemsChanged}
      />
    </View>
  );
};

scrollToLocation ist eine Methode zur programmatischen Navigation zu jedem Abschnitt. Sie akzeptiert sectionIndex, itemIndex und viewPosition (0 — Anfang, 0.5 — Mitte, 1 — Ende). In Kombination mit einem seitlichen alphabetischen Index können Sie eine schnelle Navigation wie in den Standard-iOS-Kontakten implementieren.

SectionList Leistungsoptimierung

Die Optimierung von SectionList folgt denselben Prinzipien wie die Optimierung von FlatList, mit zusätzlichen Nuancen in Bezug auf Abschnitte. Jede Abschnittsüberschrift ist eine zusätzliche View, die beim Scrollen gerendert und neu gerendert wird. Bei 50+ Abschnitten können Überschriften das Scrollen verlangsamen.

Verwenden Sie React.memo für renderSectionHeader und renderItem, um unnötige Neurenderungen zu vermeiden. Wenn sich Abschnitte nicht dynamisch ändern, ziehen Sie useMemo für das Abschnittsarray in Betracht. Für sehr große Listen kombinieren Sie SectionList mit getItemLayout und geben feste Höhen für Überschriften und Elemente an.

OptimierungstechnikBeschreibungEffekt
React.memoMemoisierung von Überschriften- und ElementkomponentenReduziert die Anzahl der Neurenderungen beim Scrollen
getItemLayoutFeste Höhe von Überschrift + ElementEliminiert Messung, beschleunigt Scrollen zum Index
maxToRenderPerBatchElemente pro Batch begrenzenVerhindert Verzögerungen beim schnellen Scrollen
windowSizeAuf 5-10 für große Listen reduzierenReduziert die Anzahl gleichzeitig gerenderter Elemente

SectionList vs FlatList: Wann was wählen

Die Wahl zwischen SectionList und FlatList hängt von der Datenstruktur ab. Wenn die Daten ein flaches Array sind — verwenden Sie FlatList. Wenn die Daten natürlich in Kategorien mit Überschriften gruppiert sind — verwenden Sie SectionList. Verwenden Sie SectionList nicht für einen einzelnen Abschnitt — FlatList erledigt dies effizienter.

Der Leistungsunterschied ist bei gleicher Anzahl von Elementen minimal. SectionList fügt Overhead für das Rendern von Überschriften hinzu, aber dieser Overhead ist gerechtfertigt, wenn Überschriften semantische Bedeutung haben. Wenn keine Überschriften benötigt werden — ist FlatList mit ListHeaderComponent zur Simulation von Abschnitten schneller.

Auswahlkriterien

Verwenden Sie SectionList, wenn: Daten standardmäßig gruppiert sind (Kontakte nach Buchstaben), sticky Header benötigt werden, Abschnittsüberschriften interaktive Elemente enthalten (Schaltflächen, Kontrollkästchen). Verwenden Sie FlatList, wenn: Daten flach sind, die Gruppierung sich dynamisch ändert, mehr als 50 Kategorien vorhanden sind und die Überschriften einheitlich sind.

SectionList Implementierungsbeispiele

SectionList mit einem alphabetischen Index ist ein klassischer Anwendungsfall. Die Implementierung umfasst eine Seitenleiste mit Buchstaben und scrollToLocation zum Springen zu einem Abschnitt. Nachfolgend eine vollständige Implementierung einer Kontaktliste mit alphabetischer Navigation.

js
const ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');

const AlphabetContacts = () => {
  const ref = React.useRef(null);

  const sections = React.useMemo(() =>
    ALPHABET.map(letter => ({
      title: letter,
      data: contacts.filter(c => c.name.startsWith(letter)),
    })).filter(s => s.data.length > 0),
  []);

  return (
    <View style={styles.container}>
      <SectionList
        ref={ref}
        sections={sections}
        keyExtractor={item => item.id}
        renderItem={renderContact}
        renderSectionHeader={renderHeader}
        getItemLayout={getItemLayout}
      />
      <View style={styles.sidebar}>
        {ALPHABET.map(letter => (
          <Text
            key={letter}
            onPress={() => scrollToSection(letter)}
          >{letter}</Text>
        ))}
      </View>
    </View>
  );
};

Wichtig: Beim dynamischen Filtern von Abschnitten verwenden Sie useMemo, um das Array zu stabilisieren. Ohne Memoisierung erstellt SectionList bei jeder Filteränderung alle Zellen neu, was zum Verlust der Scrollposition und des Zustands verschachtelter Komponenten führt.

Häufig gestellte Fragen

Kann SectionList mit dynamischen Abschnitten verwendet werden?

Ja, SectionList unterstützt dynamische Abschnittsänderungen. Wenn sich das Abschnittsarray ändert, rendert die Komponente nur die geänderten Abschnitte neu. Verwenden Sie für einen stabilen Betrieb einen key für jeden Abschnitt und umwickeln Sie Komponenten mit React.memo.

Wie blende ich leere Abschnitte in SectionList aus?

Filtern Sie das Abschnittsarray vor der Übergabe: entfernen Sie Abschnitte mit leerem data. Wenn Daten von einer API kommen, behandeln Sie die Filterung in useMemo. Für den leeren Zustand der gesamten Liste verwenden Sie ListEmptyComponent.

Warum funktionieren sticky Header auf Android nicht?

Sticky Header sind auf Android standardmäßig aktiviert, können aber bei Konflikten mit nestedScrollEnabled nicht funktionieren. Stellen Sie sicher, dass SectionList nicht in einem ScrollView verschachtelt ist. Auf Android 12+ funktionieren sticky Header über den nativen Mechanismus, auf älteren Versionen über JS.

Wie kann ich die Übergangsanimation von sticky Headern anpassen?

SectionList bietet keine integrierte Übergangsanimation für sticky Header. Für eine benutzerdefinierte Animation verfolgen Sie onViewableItemsChanged und animieren Sie den Header-Wechsel mit der Animated API oder react-native-reanimated.

Beeinträchtigen zusätzliche Abschnitte die Leistung von SectionList?

Ja, jeder Abschnitt fügt dem DOM eine Überschrift hinzu. Bei 100+ Abschnitten nimmt die Leistung von SectionList aufgrund der großen Anzahl von Überschriften ab. Lösung: Gruppieren Sie Daten in 10-20 logische Abschnitte oder verwenden Sie FlatList mit benutzerdefinierter Gruppierung.

Zusammenfassung

  • SectionList ist eine React Native-Komponente zur Anzeige von in Abschnitte mit Überschriften und sticky Headern gruppierten Daten
  • Abschnittsstruktur besteht aus title (Überschrift) und data (Array von Elementen), übergeben über die sections-Prop
  • Sticky Header fixieren die aktuelle Abschnittsüberschrift beim Scrollen und verbessern die Navigation in langen Listen
  • Optimierung erfordert React.memo für Überschriften, useMemo für Abschnitte und getItemLayout für feste Höhe
  • scrollToLocation bietet programmatische Navigation zu jedem Abschnitt per Index
  • SectionList vs FlatList: SectionList für kategorisierte Daten mit Überschriften, FlatList für flache Arrays
  • Alphabetischer Index wird mit SectionList über scrollToLocation für schnelle buchstabenbasierte Navigation kombiniert

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