可顯示超過畫面高度的物件
- 可顯示不同的物件
- 偷懶用的 List
<ScrollView>
<ListItem key={1} />
<ListItem key={2} />
<ListItem key={3} />
<ListItem key={4} />
<ListItem key={5} />
<ListItem key={6} />
<ListItem key={7} />
</ScrollView>
React Native 更高效能的 ListView,用來顯示列表、重複的物件 從 0.43 開始支援
- 跨平台
- 支持水平佈局(flexDirection: row)
- 支援 Header
- 支援 Footer
- 支援分隔線
- 支援下拉刷新
- 支援上拉加載
- 支援跳轉到指定行(ScrollToIndex)
- 如果需要分组/類/區(section),可以使用 用法雷同。
<FlatList
data={[{key: 'a'}, {key: 'b'}]}
renderItem={({item}) => <Text>{item.key}</Text>}
/>
使用 array, render list 時會遍歷該 array
[
{ key: 'A', title: '標題', desc: '內容' },
{ key: 'B', title: '標題2', desc: '內容2' }
];
renderIte={(item) => {
console.log(item); // {key: 'A', title: '標題', desc: '內容'}
return (
<View>
<Text>{item.title}</Text>
<Text>{item.desc}</Text>
</View>
)
}}
傳入 callback function, callback 會在 List 滑動到底部時觸發
觸發 onEndReached 的時機,0.5 代表一半
清單表頭
清單尾
清單分隔線
傳入 callback function,callback 會在 List 頂部下拉清單時觸發
下拉刷新,可搭配元件 RefreshControl 達到下拉刷新的效果
refreshControl={
<RefreshControl
refreshing={this.state.refreshing}
onRefresh={this.onRefresh}
/>
}
<FlatList
data={[
{ key: 'AAAAAA' },
{ key: 'BBBBBB' },
{ key: 'CCCCCC' },
{ key: 'DDDDDD' },
{ key: 'EEEEEE' },
{ key: 'FFFFFF' },
{ key: 'GGGGGG' },
{ key: 'HHHHHH' },
{ key: 'IIIIII' },
{ key: 'JJJJJJ' },
{ key: 'KKKKKK' },
{ key: 'LLLLLL' }
]}
renderItem={({ item }) => (
<View style={{ height: 150 }}>
<Text>{item.key}</Text>
</View>
)}
onEndReached={() => {
Alert.alert('阿', '到底摟');
}}
ListHeaderComponent={
<View style={[styles.container, { backgroundColor: 'blue' }]}>
<Text style={{ color: '#fff' }}>Header</Text>
</View>
}
ListFooterComponent={
<View style={[styles.container, { backgroundColor: 'green' }]}>
<Text style={{ color: '#fff' }}>Footer</Text>
</View>
}
ListEmptyComponent={
<View style={[styles.container, { backgroundColor: 'red' }]}>
<Text style={{ color: '#fff' }}>Empty</Text>
</View>
}
ItemSeparatorComponent={({ highlighted }) => (
<View style={{ height: 3, backgroundColor: 'pink' }} />
)}
/>
<SectionList
renderItem={({item}) => <ListItem title={item} />}
renderSectionHeader={({section}) => <Header title={section.title} />}
sections={[ // homogeneous rendering between sections
{data: [...], title: ...},
{data: [...], title: ...},
{data: [...], title: ...},
]}
/>
FlatList 範例連結: https://snack.expo.io/@dmoon/flatlist-sample
ListView: https://facebook.github.io/react-native/releases/next/docs/listview.html - 舊版 ListView 使用方式 已過時