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.
react native之组织组件的更多相关文章
- React Native之倒计时组件的实现(ios android)
React Native之倒计时组件的实现(ios android) 一,需求分析 1,app需实现类似于淘宝的活动倒计时,并在倒计时结束时,活动也结束. 2,实现订单倒计时,并在倒计时结束时,订单关 ...
- React Native知识6-NavigatorIOS组件
NavigatorIOS包装了UIKit的导航功能,可以使用左划功能来返回到上一界面.本组件并非由Facebook官方开发组维护.这一组件的开发完全由社区主导.如果纯js的方案能够满足你的需求的话,那 ...
- React Native知识2-Text组件
Text用于显示文本的React组件,并且它也支持嵌套.样式,以及触摸处理.在下面的例子里,嵌套的标题和正文文字会继承来自styles.baseText的fontFamily字体样式,不过标题上还附加 ...
- react native 之子组件和父组件之间的通信
react native开发中,为了封装性经常需要自定义组件,这样就会出现父组件和子组件,那么怎么在父组件和子组件之间相互通信呢,也就是怎么在各自界面push和pop.传值. 父组件传递给子组件: 父 ...
- React Native 系列(五) -- 组件间传值
前言 本系列是基于React Native版本号0.44.3写的.任何一款 App 都有界面之间数据传递的这个步骤的,那么在RN中,组件间是怎么传值的呢?这篇文章将介绍到顺传.逆传已经通过通知传值. ...
- React Native之Image组件
同 HTML 的 img 元素一样,React Native 提供的 Image 组件可以用来显示各种途径的图片,比如网络图片.本地图片.照相机图片等. 虽然效果是一样的.然而用法还是有区别的. 1. ...
- react native 封装TextInput组件
上一篇 react-native文章提到了TextInput组件对安卓的适配问题,因此对该组件进行封装很有必要. 文章地址 react native定报预披项目知识点总结 TextInput介绍 官 ...
- React Native之常用组件(View)
一. JSX和组件的概念 React的核心机制之一就是虚拟DOM:可以在内存中创建的虚拟DOM元素.React利用虚拟DOM来减少对实际DOM的操作从而提升性能.传统的创建方式是: 但这样的代码可读性 ...
- React Native常用第三方组件汇总--史上最全 之一
React Native 项目常用第三方组件汇总: react-native-animatable 动画 react-native-carousel 轮播 react-native-countdown ...
随机推荐
- Python包的相对导入时出现错误的解决方法
在练习Python中package的相对导入时,即 from . import XXX 或者 from .. import XXX 时会遇到这样两个错误: SystemError: Parent mo ...
- javaweb回顾第二篇tomcat和web程序部署
前言这篇主要说下关于tomcat中一些属性和web程序的简单部署,可能在实际开发有更好的部署方式,但是这也是一个基础. 1:tomcat 关于tomcat估计只要接触java的人都听过这个名字,那我们 ...
- C#Winform程序如何发布并自动升级(图解)
C#Winform程序如何发布并自动升级(图解) 有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布 关于打包的大家可以看我的文章C# w ...
- 了解 JavaScript (5)– 翻转器(rollover)
用 JavaScript 最常用的效果就是,当用户将鼠标移动到图片上时,会改变网页上的图像,这样页面就能对用户的操作及时作出反应,这种称为 翻转器(rollover)效果很容易实现,而且有很多应用场合 ...
- 《STL系列》之map原理及实现
上一篇文章<STL系列>之vector原理及实现,介绍了vector的原理及实现,这篇文章介绍map的原理及实现.STL实现源码下载.STL中map的实现是基于RBTree的,我在实现的时 ...
- Angular学习笔记--last_update 20151106
参考来源:http://www.angularjs.cn/tag/AngularJS?p=1&s=50 基本要求:一周搞定33篇学习文章 目标:develop/refactor lms系统an ...
- [Aaronyang] 写给自己的WPF4.5 笔记21 [3d课 2/4]
1. 当然复杂的3d模型我们是可以通过更专业的工具做出来,然后导入项目中,我们只是方便演示,选择简单的图形. Tip: 关于摄像机的NearPlaneDistance和FarPlaneDistance ...
- 解决genemotion模拟器冲突导致的Android Studio无法启动ADB的问题
首先命令行下运行 adb nodaemon server ./adb nodaemon server (Mac OSX) 如果出现错误: error: could not install *smart ...
- Maven Learning - Direct Dependencies & Transitive Dependencies
Dependencies declared in your project's pom.xml file often have their own dependencies. The main dep ...
- [原创]自定义控件之AndroidSegmentControlView,仿IOS平台UISegmentControlView,继承自View
版权声明:本文为博主原创文章,转载请注明出处. 控件简介 UISegmentControl在IOS平台的App中非常常见,其控件如下图所示: 这种控件的主要作用是动态的更改界面的显示内容,一般应用于内 ...