Flat List
렌더링 되는 양이 넘어서 화면을 넘어갈 때는
스크롤을 해서 넘어갈 수 있어야 한다.
- ScrollView
- FlatList
두가지 방법이 있다.
먼저 ScrollView 컴포넌트
import { Button, StyleSheet, View, Text, ScrollView } from 'react-native';
const ListScreen = ({ navigation, route }) => {
const todos = [];
for (let i = 1; i < 501; i++) {
todos.push({ id: i, task: `task ${i}` });
}
return (
<ScrollView style={styles.container}>
{todos.map(item => {
console.log(item.id);
return (
<View
key={item.id}
style={{ paddingHorizontal: 20, paddingVertical: 20 }}
>
<Text>{item.task}</Text>
</View>
);
})}
</ScrollView>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
},
});
export default ListScreen;
FlatList 컴포넌트 사용법
return (
<FlatList
data={todos}
renderItem={({ item }) => {
console.log(item.id);
return (
<View
key={item.id}
style={{ paddingHorizontal: 20, paddingVertical: 20 }}
>
<Text>{item.task}</Text>
</View>
);
}}
/>
);
위와 같이 사용하면 되고,
item 값을 가져와서 사용할 수 있음
key를 설정할 필요가 없어짐.
key를 임의로 설정하고 싶다면 keyExtractor 라는 걸 가져와서 반환할 수 있다.
- Scroll View는 한번에 다가져옴 (양이 정해져 있을 때)
- FlatList는 적당히 가져온 후 계속 가져옴 (양이 많을 때)
windowSize
Flat List에서는 windowSize라는 Props가 있음
기본값은 21인데
이는 prev 10, curr 1, next 10 개 임을 말함.
이전페이지 + 다음 페이지 + 현재 화면 (0 + 1 + 10 ) * 10
windowSize를 5로 설정하면
prev : 2, curr:1 , next: 2
이런식이고 그러면, (0+1+2) * 10 = 31
ListHeaderComponent
<FlatList
data={todos}
renderItem={({ item }) => <ListItem item={item} />}
keyExtractor={item => String(item.id)}
windowSize={5}
ItemSeparatorComponent={Separator}
ListHeaderComponent={() => <View style={{ height: 10 }}></View>}
/>
아니면 아래와 같이도 사용할 수 있다.
ListHeaderComponent={View}
ListHeaderComponentStyle={{ height: 10 }}
아무튼, Header에 컴포넌트를 주는 것임.
마찬가지로 ListFooterComponent, Style 둘다 있다.