zoukankan      html  css  js  c++  java
  • react native之组织组件

    这些组件包括<TabView>,<NavigatorView>和<ListView>,他们实现了手机端最常用的交互和导航。你会发现这些组件在实际的项目中会非常有用。

    原生的<Listview>组件使用起来会很平滑和顺畅,如果你想在ListView里渲染大量的数据,你必须让视图足够简单,这样才能减少卡顿、

    React Native的<ListView>组件需要两个属性:dataSource和renderRow.dataSource。

    基本用法演示在SimpleList.js文件里,我们开始为我们的<SimleList>组件新增一个数据源,A ListView.DataSource需要实现rowHasChanged方法。下面是一个简单列子:

    var ds=new ListView.DataSource(rowHasChanged:(r1,r2)=>r1!==r2);

    为了在数据源中获取到实际的内容,我们使用cloneWithRows.在getInitialState方法中返回数据源:

    getInitialState:function(){
    
    var ds=new ListView.DataSource(rowHasChanged:(r1,r2)=>r1!==r2);
    return{
      dataSource:ds.cloneWithRows(['标题1','标题2','标题3','标题4','标题5'])
    };
    }

    另外需要的一个属性是renderRow,它需要一个函数返回使用JSX表示的数据的形式。如:

    _renderRow:fuction(rowData){
    
    return <Text style={styles.row}>{rowData}</Text>;
    
    }

    现在我们把他们都整合起来看起来像这样:

    <ListView
    
    dataSource={this.state.dataSource}
    
    renderRow={this._renderRow}
    
    />

    一、使用ListView

     这里我们将创建一个APP来显示纽约时报销量列表,并且可以让我们浏览每本书的内容。

    首先,我们先将数据源初始化为空,如下:

    getInitialState:function(){
    
    var ds=new ListView.DataSource(rowHasChanged:(r1,r2)=>r1!==r2);
    return{
      dataSource:ds.cloneWithRows([])
    };
    }

    然后,新增一个获取数据的方法并且一旦我们获得了数据就立即更新数据源。

    _refreshData:function(){
    
    var endpoint="http://api.nytimes.com/svc/books/v3/lists/hardcover-fiction?respone-format=json&api-key="+API_KEY;
    
    fetch(endpoint)
    
    .then((respone)=>respone.json())
    
    .then((rjson)=>{
    
    this.setState({
    
    dataSource:this.state.dataSource.cloneWithRows(rjson.results.books)
    
    });
    
    });
    
    }

    纽约时报的API返回每本书都有三个属性分别是:coverURL,author,tittle.我们更新<ListView>的渲染函数将返回基于这三个属性的组件。

    对于_renderRow,对于<BookItem>我们仅仅传递相关数据,如下:

    _renderRow:function(rowData){
    
      return <BookItem coverURL={rowData.book_image}
    
                                 title={rowData.title}
    
                                  author={rowData.author}/>
    
    },

     我们还需要一个页脚页眉组件,来展示程序的功能。注意<ListView>,页脚和页眉不是粘的,他们与列表的其他内容一起滚动。如果你不希望这样,可以这样:

    在BookListV2.js新增个方法来渲染页眉和页脚元素

    _renderHeader:function(){
    
    return (
    
      <View style={styles.sectionDivider}>
    
      <Text style={styles.headingText}>
    
        我是页眉
    
    </Text>
    
      </View>);
    
    
    },
    
    _renderFooter:function(){
    
    <View style={styles.sectionDivider}>
    
      <Text style={styles.headingText}>
    
        我是页脚
    
    </Text>
    
      </View>);
    
    },

    这个应用包含2个文件:BookListV2.js和BookItem.js.

  • 相关阅读:
    表格行内编辑增删改查
    rpc远程调用开发
    gdb调试程序
    Makefile文件编写
    CentOS6.6源码编译升级GCC至4.8.2
    linux 下C语言编程库文件处理与Makefile编写
    laravel队列-让守护进程处理耗时任务
    回顾javase点滴
    服务端生成word并压缩打包下载
    pytest框架插件(用例依赖、多重校验、执行顺序、失败重跑、重复执行、标记)
  • 原文地址:https://www.cnblogs.com/xujie520/p/5181798.html
Copyright © 2011-2022 走看看