Summary: In this tutorial, you will learn how to use the React Native SectionList component to render grouped data.
Introduction to the React Native SectionList
In React Native, the FlatList component is efficient in rendering a large flat list. To render a list of grouped data, you can use the SectionList component.
First, import the SectionList component from react-native library:
import {SectionList} from 'react-native';Code language: JavaScript (javascript)Second, pass two required props to the SectionList component:
<SectionList
sections = {data}
renderItem = {renderItem}
/>Code language: HTML, XML (xml)Like the FlatList component, the SectionList requires two props:
sectionsis an array of items to render.renderItemis a function that determines how to render each item.
The SectionList component renders items lazily, meaning that it renders only items that are visible on the screen.
React Native SectionList Component example
The following example shows how to use the SectionList component to render a list of grouped items:
import {
Text,
SafeAreaView,
StyleSheet,
SectionList,
View,
} from 'react-native';
export const sections = [
{
title: 'Fruits',
data: [
{ id: 1, name: 'Apple', emoji: '🍎' },
{ id: 2, name: 'Banana', emoji: '🍌' },
{ id: 3, name: 'Cherry', emoji: '🍒' },
{ id: 4, name: 'Grapes', emoji: '🍇' },
],
},
{
title: 'Vegetables',
data: [
{ id: 5, name: 'Carrot', emoji: '🥕' },
{ id: 6, name: 'Potato', emoji: '🥔' },
{ id: 7, name: 'Broccoli', emoji: '🥦' },
{ id: 8, name: 'Spinach', emoji: '🥬' },
],
},
{
title: 'Dairies',
data: [
{ id: 9, name: 'Milk', emoji: '🥛' },
{ id: 10, name: 'Cheese', emoji: '🧀' },
{ id: 12, name: 'Butter', emoji: '🧈' },
],
},
];
const App = () => {
const renderItem = ({ item }) => {
return (
<View style={styles.listItem}>
<Text style={styles.listTitle}>{item.name}</Text>
<Text style={styles.listTitle}>{item.emoji}</Text>
</View>
);
};
const renderSectionHeader = ({ section: { title } }) => (
<Text style={styles.header}>{title}</Text>
);
const renderSectionSeparator = () => <View style={styles.sectionSeparator} />;
const renderItemSeparatorComponent = () => (
<View style={styles.itemSeparator} />
);
return (
<SafeAreaView style={styles.container}>
<SectionList
sections={sections}
renderItem={renderItem}
renderSectionHeader={renderSectionHeader}
SectionSeparatorComponent={renderSectionSeparator}
ItemSeparatorComponent={renderItemSeparatorComponent}
/>
</SafeAreaView>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
},
header: {
fontSize: 24,
textAlign: 'center',
paddingVertical: 5,
},
sectionSeparator: {
height: 1,
backgroundColor: '#ccc',
},
itemSeparator: {
height: 1,
backgroundColor: '#eee',
},
listItem: {
flexDirection: 'row',
justifyContent: 'space-between',
padding: 8,
},
listTitle: {
fontSize: 24,
},
});
export default App;Code language: JavaScript (javascript)Output:
How it works.
First, define sections an array that contains a list of objects, each has the title and data property. In practice, you may get this data from a local database or API call.
Second, render the sections array using the SectionList component:
<SectionList
sections={sections}
renderItem={renderItem}
renderSectionHeader={renderSectionHeader}
SectionSeparatorComponent={renderSectionSeparator}
ItemSeparatorComponent={renderItemSeparatorComponent}
/>Code language: HTML, XML (xml)In this code, we pass the props to the SectionList component:
sectionsis an array of items to render.renderItemis a function that renders each item in thesectionsarray.renderSectionHeaderis a function that renders the section header.renderSectionSeparatoris a function that renders the section separator.renderItemSeparatorComponentis a function that renders the item separator.
Third, define the corresponding functions passed to the props of the SectionList component.
Summary
- Use the
SectionListcomponent to efficiently render a large list with section headers.