RN listView使用

RN中的ListView是基于ScrollView扩展得来的,所以具有ScrollView的相关属性。

  常用的属性:

initialListSize:指定在组件刚挂载的时候渲染多少行数据。用这个属性来确保首屏显示合适数量的数据,而不是花费太多帧逐步显示出来
dataSource:数据源,类似于安卓中我们传入BaseAdapter的数据集合。

renderRow:渲染某一行,类似于BaseAdapter中的getItem方法。

onEndReached:简单说就是用于分页操作,在安卓中原生开发中,我们需要自己实现相应的方法。

onEndReachedThreshold:调用onEndReached之前的临界值,单位是像素。(默认值为1000)感觉这个1000设置很好,先如今用户不差流量,所以将体验做到最佳才是上上之策。

refreshControl:指定RefreshControl组件,用于为ScrollView提供下拉刷新功能。(该属性是继承与ScrollView)

renderHeader:渲染头部View,类似于安卓ListView中的addHeader.
renderFooter :渲染底部View,类似listView中的addFooter

renderSectionHeader :会为每个小节(section)渲染一个粘性的标题。
粘性是指当它刚出现时,会处在对应小节的内容顶部;继续下滑当它到达屏幕顶端的时候,它会停留在屏幕顶端,一直到对应的位置被下一个小节的标题占据为止。

<ListView
      dataSource={this.state.dataSource}
      renderRow={this.renderRow.bind(this)}
      pageSize={3}
      refreshControl={
         <RefreshControl
           onRefresh={this.onRefresh.bind(this)}
           refreshing={this.state.isLoading}
           colors={['#0000ff', '#00ff00', '#ff0000']}
           enabled={true}
           />
       }
      />

定义listView的item:

renderRow(rowData, sectionID, rowID) {
        var _ = this;//这个this是通过上面this.renderRow.bind(this)传递过来的
        let sepraView;
        {/*listView分割线*/}
        //这里没有使用rowData获取length(rowData代表一条数据) 而是_.props.data拿到数据源size
        if (rowID != _.props.data.length - 1) {
            sepraView = <View style={styles.separator}/>
        }
        return (
            rowData?
                <View key={rowID} style={{marginLeft: 20}}>
                    <View style={styles.contentContener}>
                        <Text style={styles.name}>{rowDate.name}</Text>
                        <Text style={styles.fontGray}>{rowData.desc}</Text>
                    </View>
                    {sepraView}
                </View>
                : <View></View>
        )
    }

绑定数据源:
写法基本上是固定 没什么可说的

constructor(props) {
        super(props);
        let ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
        this.state = {
            //this.props.data数据
            dataSource: ds.cloneWithRows(this.props.data),
        };
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值