RN 列表组件之三 FlatList

RN 列表组件之三 FlatList

如果需要分组/类/区,就使用SectionLIst;基于VirtualizedList 组件的封装

@FlatList 组件的属性

<FlatList  
    ref = 'flatList'  // this.refs.flatList 获取到该组件
    data = {[{name: '小米'},{name: '小兵'}]}   // 列表的数据源, 数组
    extraData = {this.state} //引用类型,数据可能不会更新,只是复制,没有操作引用的对象
    ListHeaderComponent = {this._listHeaderComponent.bind(this)}//渲染头部组件
    ListEmptyComponent = {this._listEmptyComponent.bind(this)} //列表为空时渲染
    initialNumToRender = {6} //首屏渲染的数据量,不会在滑动中被卸载
    renderItem = {this._renderItem.bind(this)} //渲染列表数据
    keyExtractor= {(item, index) => index + item;} //每行不一样的key
    ItemSeparaterComponent = {() => <View style={{height:6}} /> //行分隔线,首行前和尾行后无分隔
    columnWrapperStyle = {{borderWidth: 2}}  //行数>1时,可额外设置行样式
    showsVerticalScrollIndicator = {false} //继承ScrollView的属性,显示水平指示器默认是true
    horizontal = {false} //默认true是垂直布局
    numColumns = {3}  // 水平布局的item数量
    ListFooterComponent = {this._listFooterComponent.bind(this)} //渲染底部组件
    refreshing = {true} // 等待加载出现加载的符号
    onRefresh = {this._onRefresh.bind(this)} //上拉刷新
    onEndReachedThreshold = {0.1} //当距离内容比例不足内容0.1比例时触发onEndReached
    onEndReached = {this._endReached.bind(this)} //上拉加载数据       
/>
_onRefresh(){
    let that=this;
    // 页面渲染之后在加载结束周期重新加载
    that.componentDidMount();
}
_endReached(){
    let that=this
    // 判断首屏满屏的情况
    if(that.state.data && that.state.length < parseInt(that.state.totalCount)){
        that.state.currentPage++;
    }else{
         //若总数未满一屏,进去就提示
         alert('已加载完成')
    }
}
_listHeaderComponent(){
    return (
        <View>
            <Text>也可以是一组图片的渲染</Text>
        </View>
    )
}
_listEmptyComponent(){
    return (
        <View>
            <Text>暂无数据</Text>
        </View>
    )
}
_renderItem(item){
    return (
        <TouchableHighlight
            style = {{color: '#333'}}
            activeOpacity = {0.5}  //触摸激活时的不透明度
            onHindUnderlay = {() => {}}  //底层颜色被隐藏时调用
            onShowUnderlay = {() => {}}  //底层颜色显示的时候调用
            underlayColor = {'red'}     //触摸操作底层的颜色
            onPress = {() => {}}    //可以绑定事件
        >  // 触摸视图,只能包含一个子节点
            <View><Text>{item.name}</Text></View>
        </TouchableHighlight>
    )
}
_listFooterComponent(){
    return (
        <View>
            <Text>列表底部的布局</Text>
        </View>
    )
}

tips:复习下js的引用类型和基本类型
基本类型:undefined、string、number、null、boolean
特点:值不可改变,比较是值的比较,存在栈中,栈区包括了变量的标识符和变量的值。
引用类型:object、function、array等对象类型,对象是属性和方法的集合。也就是说引用类型可以拥有属性和方法,属性又可以包含基本类型和引用类型。
特点:值可变,同时保存在栈内存和堆内存中的对象,引用类型的比较是引用的比较,引用类型的赋值其实是对象保存在栈区地址指针的赋值,因此两个变量指向同一个对象,任何的操作都会相互影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值