React Native组件--ListView

作者: 一亩水塘 | 来源:发表于2016-06-22 20:33 被阅读997次

    简介

    ListView - 一个核心组件,用于高效地显示一个可以垂直滚动的变化的数据列表。最基本的使用方式就是创建一个ListView.DataSource数据源,然后给它传递一个普通的数据数组,再使用数据源来实例化一个ListView组件,并且定义它的renderRow回调函数,这个函数会接受数组中的每个数据作为参数,返回一个可渲染的组件(作为listview的每一行)。

    基本用法

    constructor(props) {
        super(props);
    
        var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !==r2});
    
        this.state = {
        dataSource: ds.cloneWithRows(['row 1', 'row 2'])
        };
    }
    
    render() {
        return (
        <ListView
            dataSource={this.state.dataSource}
            renderRow={(rowData) => <Text>{rowData}</Text>}
        />
     );
    }
    

    换一种写法并添加点击事件

        class ListViewSample extends Component {
    
          constructor(props) {
            super(props);
            var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
            this.state = {
              dataSource: ds.cloneWithRows(['row 1', 'row 2'])
            };
          }
    
          render() {
    
            return (
              <ListView
                dataSource={this.state.dataSource}
                renderRow={this._renderRow.bind(this)}
              />
            );
          }
    
          _renderRow(rowData : string , rowID : number){
             return (
               <TouchableHighlight onPress={() => this._pressRow(rowData, rowID)}>
                 <View>
                   <Text>
                     {rowData}
                   </Text>
                 </View>
               </TouchableHighlight>
             );
          } 
    
          _pressRow(url: string, rowID: number){
              this._alert(url);
              
              switch (rowID) {
                case 0:
                  break;
                case 1:
                  break;
                default:
                  break;
              }
          }
    
          _alert(url : string){
             AlertIOS.alert(
              '提醒',
              ''+ url,
              [{text: 'Cancle', onPress: () => console.log('Foo Pressed!')},
              {text: 'OK', onPress: () => console.log('Bar Pressed!')},]
             );
          }
    
        }
    

    属性

    View属性

    ScrollView 相关属性样式全部继承

    dataSource ListViewDataSource

    ListView.DataSource实例(列表依赖的数据源)

    initialListSize number

    指定在组件刚挂载的时候渲染多少行数据。用这个属性来确保首屏显示合适数量的数据,而不是花费太多帧逐步显示出来。

    在ListView标签下添加:
    initialListSize = {10}
    

    onEndReachedThreshold

    调用onEndReached之前的临界值,单位是像素。

    <a>PS:这个值如果不设置会导致onEndReached无法正常使用</a>

    pageSize

    每次事件循环(每帧)渲染的行数。

    在ListView标签下添加:
    pageSize = {10}
    

    removeClippedSubviews

    用于提升大列表的滚动性能。需要给行容器添加样式overflow:'hidden'。(Android已默认添加此样式)。此属性默认开启。

    scrollRenderAheadDistance number

    当一个行接近屏幕范围多少像素之内的时候,就开始渲染这一行。

    方法

    renderFooter renderHeader

    页头与页脚会在每次渲染过程中都重新渲染(如果提供了这些属性)。如果它们重绘的性能开销很大,把他们包装到一个StaticContainer或者其它恰当的结构中。页脚会永远在列表的最底部,而页头会在最顶部。

    onEndReached

    当所有的数据都已经渲染过,并且列表被滚动到距离最底部不足onEndReachedThreshold个像素的距离时调用。原生的滚动事件会被作为参数传递。译注:当第一次渲染时,如果数据不足一屏(比如初始值是空的),这个事件也会被触发。

    onChangeVisibleRows

    当可见的行的集合变化的时候调用此回调函数。visibleRows 以 { sectionID: { rowID: true }}的格式包含了所有可见行,而changedRows 以{ sectionID: { rowID: true | false }}的格式包含了所有刚刚改变了可见性的行,其中如果值为true表示一个行变得可见,而为false表示行刚刚离开可视区域而变得不可见。

    renderRow

    从数据源(Data source)中接受一条数据,以及它和它所在section的ID。返回一个可渲染的组件来为这行数据进行渲染。默认情况下参数中的数据就是放进数据源中的数据本身,不过也可以提供一些转换器。

    如果某一行正在被高亮(通过调用highlightRow函数),ListView会得到相应的通知。当一行被高亮时,其两侧的分割线会被隐藏。行的高亮状态可以通过调用highlightRow(null)来重置。

    renderSeparator

    如果提供了此属性,一个可渲染的组件会被渲染在每一行下面,除了小节标题的前面的最后一行。在其上方的小节ID和行ID,以及邻近的行是否被高亮会作为参数传递进来。

    效果

    屏幕快照 2016-06-22 20.32.34.png

    引用:http://reactnative.cn/docs/0.27/getting-started.html#content

    相关文章

      网友评论

      本文标题:React Native组件--ListView

      本文链接:https://www.haomeiwen.com/subject/hejndttx.html