ReactNative之FlatList的具体使用方法(2)

  • horizontal设置为true则变为水平布局模式。
  • initialNumToRender指定一开始渲染的元素数量,最好刚刚够填满一个屏幕,这样保证了用最短的时间给用户呈现可见的内容。注意这第一批次渲染的元素不会在滑动过程中被卸载,这样是为了保证用户执行返回顶部的操作时,不需要重新渲染首批元素。
  • initialScrollIndex指定渲染开始的item index
  • keyExtractor此函数用于为给定的item生成一个不重复的key。Key的作用是使React能够区分同类元素的不同个体,以便在刷新时能够确定其变化的位置,减少重新渲染的开销。若不指定此函数,则默认抽取item.key作为key值。若item.key也不存在,则使用数组下标。
  • legacyImplementation设置为true则使用旧的ListView的实现。
  • numColumns多列布局只能在非水平模式下使用,即必须是horizontal={false}。此时组件内元素会从左到右从上到下按Z字形排列,类似启用了flexWrap的布局。组件内元素必须是等高的——暂时还无法支持瀑布流布局。
  • onEndReached当列表被滚动到距离内容最底部不足onEndReachedThreshold的距离时调用。
  • onEndReachedThreshold决定当距离内容最底部还有多远时触发onEndReached回调。注意此参数是一个比值而非像素单位。比如,0.5表示距离内容最底部的距离为当前列表可见长度的一半时触发。
  • onRefresh如果设置了此选项,则会在列表头部添加一个标准的RefreshControl控件,以便实现“下拉刷新”的功能。同时你需要正确设置refreshing属性。
  • onViewableItemsChanged在可见行元素变化时调用。可见范围和变化频率等参数的配置请设置viewabilityconfig属性
  • refreshing在等待加载新数据时将此属性设为true,列表就会显示出一个正在加载的符号。
  • renderItem根据行数据data,渲染每一行的组件。这个参照下面的demo
  • viewabilityConfig请参考ViewabilityHelper 的源码来了解具体的配置。
  • 方法

    scrollToEnd
    滚动到底部。如果不设置getItemLayout
    属性的话,可能会比较卡。

    scrollToIndex
    滚动到指定index的item
    如果不设置getItemLayout
    属性的话,无法跳转到当前可视区域以外的位置。

    scrollToItem
    滚动到指定item,如果不设置getItemLayout
    属性的话,可能会比较卡。

    scrollToOffset
    滚动指定距离

    Demo:

    import React, {Component} from 'react';
    import {
      StyleSheet,
      View,
      FlatList,
      Text,
      Button,
    } from 'react-native';
    
    var ITEM_HEIGHT = 100;
    
    export default class FlatListDemo extends Component {
    
      _flatList;
    
      _renderItem = (item) => {
        var txt = '第' + item.index + '个' + ' title=' + item.item.title;
        var bgColor = item.index % 2 == 0 ? 'red' : 'blue';
        return <Text style={[{flex:1,height:ITEM_HEIGHT,backgroundColor:bgColor},styles.txt]}>{txt}</Text>
      }
    
      _header = () => {
        return <Text style={[styles.txt,{backgroundColor:'black'}]}>这是头部</Text>;
      }
    
      _footer = () => {
        return <Text style={[styles.txt,{backgroundColor:'black'}]}>这是尾部</Text>;
      }
    
      _separator = () => {
        return <View style={{height:2,backgroundColor:'yellow'}}/>;
      }
    
      render() {
        var data = [];
        for (var i = 0; i < 100; i++) {
          data.push({key: i, title: i + ''});
        }
    
        return (
          <View style={{flex:1}}>
            <Button title='滚动到指定位置' onPress={()=>{
              //this._flatList.scrollToEnd();
              //this._flatList.scrollToIndex({viewPosition:0,index:8});
              this._flatList.scrollToOffset({animated: true, offset: 2000});
            }}/>
            <View style={{flex:1}}>
              <FlatList
                ref={(flatList)=>this._flatList = flatList}
                ListHeaderComponent={this._header}
                ListFooterComponent={this._footer}
                ItemSeparatorComponent={this._separator}
                renderItem={this._renderItem}
    
                //numColumns ={3}
                //columnWrapperStyle={{borderWidth:2,borderColor:'black',paddingLeft:20}}
    
                //horizontal={true}
    
                //getItemLayout={(data,index)=>(
                //{length: ITEM_HEIGHT, offset: (ITEM_HEIGHT+2) * index, index}
                //)}
    
                //onEndReachedThreshold={5}
                //onEndReached={(info)=>{
                //console.warn(info.distanceFromEnd);
                //}}
    
                //onViewableItemsChanged={(info)=>{
                //console.warn(info);
                //}}
                data={data}>
              </FlatList>
            </View>
    
          </View>
        );
      }
    }
    
    const styles = StyleSheet.create({
      txt: {
        textAlign: 'center',
        textAlignVertical: 'center',
        color: 'white',
        fontSize: 30,
      }
    });
    
          

    内容版权声明:除非注明,否则皆为本站原创文章。

    转载注明出处:http://www.heiqu.com/1015.html