FlatList는 목록 항목을 로드하는 데 사용할 수 있는 컨테이너입니다. 머리글 및 바닥글 지원, 다중 열 지원, 수직/수평 스크롤, 지연 로딩 등을 제공합니다.
다음은 FlatList의 몇 가지 중요한 기능입니다 -
- 스크롤 로딩과 함께 제공
- ScrolltoIndex 지원을 사용하여 스크롤 조정 가능
- 머리글 및 바닥글 지원 제공
- 다중 열 지원
- 크로스 플랫폼
- 구성 가능한 조회가능성 콜백
FlatList의 기본 구조는 다음과 같습니다 -
<FlatList data={DataContainer} renderItem={ yourenderItem} keyExtractor={item => item.id} />
FlatList는 모바일 화면의 현재 보기 포트에 맞는 제한된 수의 항목 표시를 처리하는 VirtualizedList 구성 요소에서 구현됩니다. 나머지 데이터는 사용자가 스크롤할 때 렌더링됩니다. data 및 renderItem과 같은 기본 소품을 사용하여 FlatList를 만들 수 있습니다.
FlatList로 작업하려면 다음과 같이 react-native에서 가져와야 합니다. -
import { FlatList} from "react-native";
FlatList의 중요한 속성 중 일부는 다음과 같습니다 -
소품 | 설명 |
---|---|
데이터 | 표시할 데이터가 있는 배열입니다. |
renderItem | renderItem({ 항목, 색인, 구분 기호 });
separators.highlight(), separators.unhighlight(), separators.updateProps(). |
ListEmptyComponent | 목록이 비어 있을 때 호출되는 구성 요소 클래스, 렌더링 기능 또는 렌더링 요소입니다. 목록이 비어 있을 때 무언가를 하려는 경우 이 구성 요소가 도움이 될 것입니다. |
ListFooterComponent | 모든 항목의 맨 아래에 렌더링될 구성 요소 클래스, 렌더링 기능 또는 렌더링 요소. |
ListFooterComponentStyle | 바닥글 구성 요소에 필요한스타일링은 여기에서 수행할 수 있습니다. |
ListHeaderComponent | 모든 항목의 맨 위에 렌더링될 구성 요소 클래스, 렌더링 기능 또는 렌더링 요소. |
ListHeaderComponentStyle | 헤더 구성 요소에 필요한 스타일 지정은 여기에서 수행할 수 있습니다. |
가로 | 이 속성을 true로 설정하면 항목을 가로로 렌더링합니다. |
키 추출기 | 주어진 인덱스에 대한 고유 키를 추출합니다. 이 키는 캐싱에 사용되며 항목 재정렬을 추적하는 데도 사용됩니다.(item:object, index:number) => string; |
예제 1:FlatList의 항목을 세로로 표시
예제는 FlatList의 작동을 보여줍니다. FlatList로 작업하려면 먼저 구성 요소를 가져옵니다 -
import { FlatList , Text, View, StyleSheet } from "react-native";
FlatList와 Text, View, StyleSheet 등과 같은 다른 구성 요소가 필요합니다. 위와 같이 가져옵니다.
가져오기가 완료되면 FlatList에 표시할 데이터가 필요합니다. 데이터는 아래와 같이 this.state.data 안에 저장됩니다 -
this.state = { data: [ { name: "Javascript Frameworks", isTitle: true }, { name: "Angular", isTitle: false }, { name: "ReactJS", isTitle: false }, { name: "VueJS", isTitle: false }, { name: "ReactNative", isTitle: false }, { name: "PHP Frameworks", isTitle: true }, { name: "Laravel", isTitle: false }, { name: "CodeIgniter", isTitle: false }, { name: "CakePHP", isTitle: false }, { name: "Symfony", isTitle: false } ], stickyHeaderIndices: [] };
renderItem에 대한 기능을 구현하려면
아래 함수는 항목을 처리하고 아래와 같이 Text 구성 요소에 동일한 항목을 표시합니다. -
renderItem = ({ item }) => { return ( <View style={styles.item}> <Text style={{ fontWeight: (item.isTitle) ? "bold" : "", color: (item.isTitle) ? "red" : "gray"}} >{item.name}</Text> </View> ); };
Text 구성 요소는 View 구성 요소 내부에 래핑됩니다. item.isTitle은 변수가 true/false인지 확인하고 그에 따라 굵게 표시되고 색상이 지정됩니다.
FlatList를 구현하려면
다음은 데이터 및 renderItem props가 있는 FlatList 구현입니다.
<View style={styles.container}> <FlatList data={this.state.data} renderItem={this.renderItem} keyExtractor={item => item.name} /> </View>
this.state.data 데이터에 부여됩니다. 소품 및 this.renderItem 기능이 renderItem에 할당됨 소품.
데이터를 기반으로 데이터 배열에서 고유한 속성이 될 키 속성을 알릴 수 있으며 동일한 속성이 props keyExtractor에 지정되어야 합니다. 지정하지 않으면 배열 인덱스를 key<로 간주합니다. /엠> 가치.
그래서 우리는 그 이름을 고유한 키로 간주했고 동일한 것이 keyExtractor에 할당되었습니다.
keyExtractor={item => item.name}
다음은 FlatList를 구현하는 전체 코드입니다.
import React from "react"; import { FlatList , Text, View, StyleSheet, StatusBar } from "react-native"; export default class App extends React.Component { constructor() { super(); this.state = { data: [ { name: "Javascript Frameworks", isTitle: true }, { name: "Angular", isTitle: false }, { name: "ReactJS", isTitle: false }, { name: "VueJS", isTitle: false }, { name: "ReactNative", isTitle: false }, { name: "PHP Frameworks", isTitle: true }, { name: "Laravel", isTitle: false }, { name: "CodeIgniter", isTitle: false }, { name: "CakePHP", isTitle: false }, { name: "Symfony", isTitle: false } ], stickyHeaderIndices: [] }; } renderItem = ({ item }) => {return (<View style={styles.item}><Text style={{ fontWeight: (item.isTitle) ? "bold" : "", color: (item.isTitle) ? "red" : "gray"}} >{item.name}</Text></View>);}; render() { return (<View style={styles.container}><FlatList data={this.state.data} renderItem= {this.renderItem} keyExtractor={item => item.name} stickyHeaderIndices={this.state.stickyHeaderIndices} /></View>); } } const styles = StyleSheet.create({ container: { flex: 1, marginTop: StatusBar.currentHeight || 0, }, item: { margin: 10, padding: 20, marginVertical: 8, marginHorizontal: 16, } });
출력
예시 2:FlatList의 항목을 가로로 표시
FlatList 항목을 가로로 표시하려면 FlatList 구성 요소에 props horizontal={true} 를 추가하기만 하면 됩니다.
import React from "react"; import { FlatList , Text, View, StyleSheet, StatusBar } from "react-native"; export default class App extends React.Component { constructor() { super(); this.state = { data: [ { name: "Javascript Frameworks", isTitle: true }, { name: "Angular", isTitle: false }, { name: "ReactJS", isTitle: false }, { name: "VueJS", isTitle: false }, { name: "ReactNative", isTitle: false }, { name: "PHP Frameworks", isTitle: true }, { name: "Laravel", isTitle: false }, { name: "CodeIgniter", isTitle: false }, { name: "CakePHP", isTitle: false }, { name: "Symfony", isTitle: false } ], stickyHeaderIndices: [] }; } renderItem = ({ item }) => {return (<View style={styles.item}><Text style={{ fontWeight: (item.isTitle) ? "bold" : "", color: (item.isTitle) ? "red" : "gray"}} >{item.name}</Text></View>);}; render() { return (<View style={styles.container}><FlatList horizontal={true} data={this.state.data} renderItem={this.renderItem} keyExtractor={item => item.name} stickyHeaderIndices={this.state.stickyHeaderIndices} /></View>); } } const styles = StyleSheet.create({ container: { flex: 1, marginTop: 100, }, item: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', padding: 30, margin: 2, borderColor: '#2a4944', borderWidth: 1, height:100, backgroundColor: '#d2f7f1' } });
출력