ListView
組件用于顯示1個垂直的轉動列表,其中的元素之間結構近似而僅數據不同。
ListView
更適于長列表數據,且元素個數可以增刪。和ScrollView
不同的是,ListView
其實不立即渲染所有元素,而是優先渲染屏幕上可見的元素。
ListView
組件必須的兩個屬性是dataSource
和renderRow
。dataSource
是列表的數據源,而renderRow
則逐一解析數據源中的數據,然后返回1個設定好格式的組件來渲染。
下面的例子創建了1個簡單的ListView
,并預設了1些摹擬數據。首先是初始化ListView
所需的dataSource
,其中的每項(行)數據以后都在renderRow
中被渲染成了Text
組件,最后構成全部ListView
。
rowHasChanged
函數也是ListView
的必須屬性。這里我們只是簡單的比較兩行數據是不是是同1個數據(===符號只比較基本類型數據的值,和援用類型的地址)來判斷某行數據是不是變化了。
import React, { Component } from 'react';
import { AppRegistry, ListView, Text, View } from 'react-native';
class ListViewBasics extends Component {
// 初始化摹擬數據
constructor(props) {
super(props);
const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
this.state = {
dataSource: ds.cloneWithRows([
'John', 'Joel', 'James', 'Jimmy', 'Jackson', 'Jillian', 'Julie', 'Devin'
])
};
}
render() {
return (
<View style={{paddingTop: 22}}>
<ListView
dataSource={this.state.dataSource}
renderRow={(rowData) => <Text>{rowData}</Text>}
/>
</View>
);
}
}
// 注冊利用(registerComponent)后才能正確渲染
// 注意:只把利用作為1個整體注冊1次,而不是每一個組件/模塊都注冊
AppRegistry.registerComponent('ListViewBasics', () => ListViewBasics);
ListView
的1個經常使用場景就是從服務器端取回列表數據然后顯示,要實現這1進程,你可能還需要學習React Native的網絡相干用法.
下一篇 數字圖像處理中的基本圖像類型