React Native开发之——组件ListView

前言

ListView是React Native中渲染大量数据的组件,ListView是日常开发最常用的控件之一,会话列表(微信),商品列表(淘宝),问题列表(汽车大师)等等各种列表均用到了ListView。这篇文章简单介绍下ListView的入门。

ListView

概念

使用ListView必须熟悉以下几个属性

  • dataSource
  • renderRow
  • rowHasChanged

dataSource和renderRow

ListView组件必须的两个属性是dataSource和renderRow。dataSource是列表的数据源,而renderRow则逐个解析数据源中的数据,然后返回一个设定好格式的组件来渲染。

rowHasChanged

rowHasChanged函数也是ListView的必需属性。这里我们只是简单的比较两行数据是否是同一个数据(===符号只比较基本类型数据的值,和引用类型的地址)来判断某行数据是否变化了。

实例

export default class App extends Component<Props> 
{
    constructor(props) 
    {
        super(props);
        const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
        this.state = {
        dataSource: ds.cloneWithRows([
            {"title": "hzw", "img": "hzw"},
            {"title": "xiaoxin", "img": "xiaoxin"},
            {"title": "hzw", "img": "hzw"},
            {"title": "xiaoxin", "img": "xiaoxin"},
            {"title": "hzw", "img": "hzw"},
            {"title": "xiaoxin", "img": "xiaoxin"},
            {"title": "hzw", "img": "hzw"},
            {"title": "xiaoxin", "img": "xiaoxin"},
            {"title": "hzw", "img": "hzw"},
            {"title": "xiaoxin", "img": "xiaoxin"},
            {"title": "hzw", "img": "hzw"},
            {"title": "xiaoxin", "img": "xiaoxin"},
            {"title": "hzw", "img": "hzw"},
            {"title": "xiaoxin", "img": "xiaoxin"}]),
            };
    }

    render() 
    {
        return (
        <View style={styles.container}>
            <ListView
                dataSource={this.state.dataSource}
                renderRow={this.renderRow}/>
        </View>
    );
    }

// 返回一个Item
renderRow(rowData) 
    {
        return (
        <TouchableHighlight onPress={()=>alert(rowData.title)} activeOpacity={0.3} underlayColor={'#ccc'}>
            <View style={styles.itemStyle} >
                <Image source={{uri: rowData.img}} style={styles.imageStyle}/>
                <View style={styles.subItemStyle}>
                    <Text style={{marginTop: 5, fontSize: 17}}>{rowData.title}</Text>
                    <Text style={{marginBottom: 5, fontSize: 13, color: 'green'}}>简介</Text>
                </View>
            </View>
        </TouchableHighlight>
        );

    }
}

效果图

其他

参考:Github下载地址