这些组件包括<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.

react native之组织组件的更多相关文章

  1. React Native之倒计时组件的实现(ios android)

    React Native之倒计时组件的实现(ios android) 一,需求分析 1,app需实现类似于淘宝的活动倒计时,并在倒计时结束时,活动也结束. 2,实现订单倒计时,并在倒计时结束时,订单关 ...

  2. React Native知识6-NavigatorIOS组件

    NavigatorIOS包装了UIKit的导航功能,可以使用左划功能来返回到上一界面.本组件并非由Facebook官方开发组维护.这一组件的开发完全由社区主导.如果纯js的方案能够满足你的需求的话,那 ...

  3. React Native知识2-Text组件

    Text用于显示文本的React组件,并且它也支持嵌套.样式,以及触摸处理.在下面的例子里,嵌套的标题和正文文字会继承来自styles.baseText的fontFamily字体样式,不过标题上还附加 ...

  4. react native 之子组件和父组件之间的通信

    react native开发中,为了封装性经常需要自定义组件,这样就会出现父组件和子组件,那么怎么在父组件和子组件之间相互通信呢,也就是怎么在各自界面push和pop.传值. 父组件传递给子组件: 父 ...

  5. React Native 系列(五) -- 组件间传值

    前言 本系列是基于React Native版本号0.44.3写的.任何一款 App 都有界面之间数据传递的这个步骤的,那么在RN中,组件间是怎么传值的呢?这篇文章将介绍到顺传.逆传已经通过通知传值. ...

  6. React Native之Image组件

    同 HTML 的 img 元素一样,React Native 提供的 Image 组件可以用来显示各种途径的图片,比如网络图片.本地图片.照相机图片等. 虽然效果是一样的.然而用法还是有区别的. 1. ...

  7. react native 封装TextInput组件

    上一篇 react-native文章提到了TextInput组件对安卓的适配问题,因此对该组件进行封装很有必要. 文章地址  react native定报预披项目知识点总结 TextInput介绍 官 ...

  8. React Native之常用组件(View)

    一. JSX和组件的概念 React的核心机制之一就是虚拟DOM:可以在内存中创建的虚拟DOM元素.React利用虚拟DOM来减少对实际DOM的操作从而提升性能.传统的创建方式是: 但这样的代码可读性 ...

  9. React Native常用第三方组件汇总--史上最全 之一

    React Native 项目常用第三方组件汇总: react-native-animatable 动画 react-native-carousel 轮播 react-native-countdown ...

随机推荐

  1. 前端开发-Weex初试

    1 Weex介绍 weex是阿里2016年开源的一套跨移动端(Andriod/IOS/Wap)的前端框架,采用VUE,较React Native入门相对简单 官网地址 2 Weex安装与初始化 2.1 ...

  2. Oracle 查看哪个表被锁定,并获取对应的sessionID

    SELECT A.OWNER,A.OBJECT_NAME,B.XIDUSN,B.XIDSLOT,B.XIDSQN,B.SESSION_ID,B.ORACLE_USERNAME, B.OS_USER_N ...

  3. 于网站主机,DNS,域名解析,Web服务器关系详解

    /*本文将介绍网站主机,DNS,域名解析,Web服务器关系,转载请保留以下版权*/ /*启明星工作室 www.dotnetcms.org  提供会议室预定系统,请假系统,helpdesk,工作日志系统 ...

  4. solr课程学习系列-solr的概念与结构(1)

    Solr是基于Lucene的采用Java5开发的一个高性能全文搜索服务器.源于lucene,却更比Lucene更为丰富更为强大的查询语言.同时实现了可配置.可扩展并对查询性能进行了优化,并且提供了一个 ...

  5. HTML5手机APP开发入门(2)

    HTML5手机APP开发入门(2) 课程内容 使用IonicFramework v2 + angular 2 完成一个简单的联系人列表的操作,有三个页面: ListPage,DetailPage,Ad ...

  6. c10k问题及其解决方案

    本文主要讲述高并发http应用中的c10k瓶颈问题:在很多服务器初始状态下,无法服务1w左右的并发连接.这与每次服务的资源消耗.服务器的硬件配置固然有关,但很多时候是被linux的默认配置以及软件st ...

  7. 适合wordpress中文网站的seo优化插件 DX-Seo

    DX-Seo是一款强大的多功能wordpress seo插件,主要功能及其使用方法如下 全局开关设置 启动插件后,进入"DX-Seo"栏目,你可以开启或者关闭其中的所有功能. 自动 ...

  8. C#记录对象的变化

    经常,我们会遇到一个场景,在保存对象到数据库之前,对比内存对象和数据库值的差异. 下面我写了一种实现,为保存定义一个事件,然后自动找出对象之间的差异,请注意,并没有通过反射的方式去获取每个属性及其值. ...

  9. 15.6.8-sql小技巧

    取月头月尾: declare @someDay datetime,@firstDay datetime,@endDay datetime set @someDay='2015.2.2' ,) ,) s ...

  10. HTML5图片旋转

    HTML5图片旋转 首先我们使用Cococs2dx-Js-Lite版,来创建一个工程,我们所需要的开发环境如下: 1,webstrom 2,google chrome浏览器 3,cocos2dx-Js ...