商品界面实现起来很简单,其实就是一个listview的使用:

关于listview的使用,在官方文档里面已经介绍的很详细了。在这里我要提一个坑。

listview在Android和iOS中的效果是不一样的,listview对iOS的支持已经很好了,但是对android很多属性都不支持。有些地方官方文档也说的模棱两可的,因此如果想做炫酷的上、下拉效果的话,建议做iOS。

下面看一下代码吧:

 'use strict'

 var React = require('react-native')
import Icon from 'react-native-vector-icons/FontAwesome'
import AniImage from '../components/AniImage'
import AniRoll from '../components/AniRoll'
var {
Image,
ListView,
StyleSheet,
Text,
View,
TouchableOpacity,
Navigator,
PropTypes
} = React var REQUEST_URL = 'http://192.168.6.5:8888/getCommidity' class Commodity extends React.Component {
static propTypes = {
navigator: PropTypes.object,
fetch: PropTypes.func
};
constructor (props) {
super(props)
this.state = {
dataSource: new ListView.DataSource({
rowHasChanged: (row1, row2) => row1 !== row2
}),
loaded: false
}
}
componentDidMount () {
this.fetchData()
} fetchData () {
fetch (REQUEST_URL)
.then((response) => response.json())
.then((responseData) => {
this.setState({
dataSource: this.state.dataSource.cloneWithRows(responseData),
loaded: true
})
})
.done()
} render () {
if (!this.state.loaded) {
return this.renderLoadingView()
} return (
<ListView
initialListSize={3}
dataSource={this.state.dataSource}
renderRow={this.renderCommidity.bind(this)}
style={styles.listView}/>
)
} renderLoadingView () {
return (
<View style={styles.txtContainer}>
<AniRoll inputRange={[0, 1]} outputRange={['0deg', '10000deg']} style={{width: 50, height: 50}} />
<Text>
正在加载图文。。。
</Text>
</View>
)
} renderCommidity (commidities) {
return (
<View style={styles.container} >
<Image style={styles.viewTopImage} source={require('../assets/listbg.png')}>
<TouchableOpacity onPress={this.toCommodityScreen.bind(this, commidities)}>
<AniImage
type={'image'}
inputRange={[0, 100]}
outputRange={[0, 1]}
style={styles.aniImage}
url={'http://192.168.6.5:8888/getImage?imgName=' + commidities.imgPath1} />
</TouchableOpacity>
</Image>
<View style={styles.viewTxtContent}>
<TouchableOpacity>
<Text style={styles.txtContent}>{commidities.title}</Text>
</TouchableOpacity>
</View>
<View style={styles.viewBottom}>
<View style={styles.viewBottomLeft}>
<Icon name='heart-o' size={20} />
<Text style={styles.txtContent} >{commidities.love}</Text>
</View>
<View style={styles.viewBottomRight}>
<View style={styles.viewBottomRightContainer}>
<Icon name='clock-o' size={20} />
<Text style={styles.txtContent} >{commidities.date}</Text>
</View>
</View>
</View>
<Image source={require('../assets/splite.png')} style={styles.imageSplit}/>
</View>
)
} toCommodityScreen (commidities) {
var commodity = commidities
let navigator = this.props.navigator
navigator.push({id: 'CommodityScreen', sceneConfig: Navigator.SceneConfigs.HorizontalSwipeJump, passProp: {commodity}})
}
} var styles = StyleSheet.create({
container: {
flex: 1,
flexDirection: 'column',
backgroundColor: '#ffffff'
},
txtContainer: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
backgroundColor: '#fffff'
},
aniImage: {
height: 330,
width: null
},
viewTopImage: {
height: 330,
width: null,
margin: 10
},
txtContent: {
fontSize: 16,
marginLeft: 5
},
viewTxtContent: {
marginLeft: 10,
marginRight: 10,
marginBottom: 5,
flex: 1
},
txtBottom: {
flex: 1,
fontSize: 12
},
viewBottom: {
marginLeft: 10,
marginRight: 10,
marginBottom: 5,
flex: 1,
flexDirection: 'row'
},
imageSplit: {
flex: 0.3,
backgroundColor: '#F0F0F0'
},
numberText: {
fontSize: 15,
marginLeft: 20
},
viewBottomLeft: {
flex: 1,
flexDirection: 'row'
},
viewBottomRight: {
flex: 1,
alignItems: 'flex-end'
},
viewBottomRightContainer: {
flex: 1,
flexDirection: 'row'
}
}) module.exports = Commodity

一、构造方法:

  constructor (props) {
super(props)
this.state = {
dataSource: new ListView.DataSource({
rowHasChanged: (row1, row2) => row1 !== row2
}),
loaded: false
}
}

dataSource就是listview的数据源,loaded则是判断数据是否加载完毕。

二、fetchData方法

获取listview的接口数据,数据请求完成之后,重新渲染界面将loaded设置为true

三、toCommodityScreen方法

进入商品的详情界面。

使用react-native做一个简单的应用-06商品界面的实现的更多相关文章

  1. 使用React并做一个简单的to-do-list

    1. 前言 说到React,我从一年之前就开始试着了解并且看了相关的入门教程,而且还买过一本<React:引领未来的用户界面开发框架 >拜读.React的轻量组件化的思想及其virtual ...

  2. React Native ——实现一个简单的抓取github上的项目数据列表

    /** * Sample React Native App * https://github.com/facebook/react-native */ 'use strict'; var React ...

  3. 使用react-native做一个简单的应用-04界面主框架

    欢迎界面搭建完毕,我们接下来需要做的就是搭建应用程序的主体框架啦.首先我们看一下首页的截图: 从图中看到,我将首页分为了三部分:用黑色矩形表示的头部,绿色表示的内容和红色表示的底部. 下面我们需要解决 ...

  4. 用react native 做的一个推酷client

    用react native 做的一个推酷client 仅供大家參考.仅仅为抛砖引玉.希望大家能以此来了解react.并编写出很多其它的优质的开源库,为程序猿做出贡献. 用的的组件: Navigator ...

  5. 如何用 React Native 创建一个iOS APP?

    诚然,React Native 结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iOS 和 Android 原生应用.在 JavaScript 中用 Reac ...

  6. 如何用 React Native 创建一个iOS APP?(三)

    前两部分,<如何用 React Native 创建一个iOS APP?>,<如何用 React Native 创建一个iOS APP (二)?>中,我们分别讲了用 React ...

  7. 【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎

    Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言 好吧,说是“粒子引擎”还是大言不 ...

  8. 【 D3.js 入门系列 --- 3 】 做一个简单的图表!

    前面说了几节,都是对文字进行处理,这一节中将用 D3.js 做一个简单的柱形图. 做柱形图有很多种方法,比如用 HTML 的 div 标签,或用 svg . 推荐用 SVG 来做各种图形.SVG 意为 ...

  9. 一起用HTML5 canvas做一个简单又骚气的粒子引擎

    前言 好吧,说是"粒子引擎"还是大言不惭而标题党了,离真正的粒子引擎还有点远.废话少说,先看demo 本文将教会你做一个简单的canvas粒子制造器(下称引擎). 世界观 这个简单 ...

  10. Jmeter初步使用二--使用jmeter做一个简单的性能测试

    经过上一次的初步使用,我们懂得了Jmeter的安装与初步使用的方法.现在,我们使用Jmeter做一个简单的性能测试.该次测试,提交的参数不做参数化处理,Jmeter各元件使用将在介绍在下一博文开始介绍 ...

随机推荐

  1. UILabel 的使用,属性详解

    ·UILable是iPhone界面最基本的控件,主要用来显示文本信息. ·常用属性和方法有: .创建 CGRect rect = CGRectMake(, , , ); UILabel *label ...

  2. OpenGL ES 2.0 曲面物体的构建

    球体构建的基本原理构建曲面物体最重要的就是找到将曲面恰当拆分成三角形的策略. 最基本的策略是首先按照一定的规则将物体按行和列两个方向进行拆分,这时就可以得到很多的小四边形.然后再将每个小四边形拆分成两 ...

  3. utf-8的mysql表笔记

    链接数据库指定编码集jdbc:mysql://192.168.2.33:3306/mybase?useUnicode=true&characterEncoding=UTF-8 mysql默认链 ...

  4. Mysql int(11) 和 int(1)

    Mysql 可以为整数类型制定宽度,例如:int(11) ,对大多数应用这是没有意义的:它不会限制值的合法范围,它只是规定了Mysql的一些交互工具(例如mysql命令行客户端)用来显示字符个数.对于 ...

  5. 移动web开发中遇到的一些问题收纳

    1.获取滚动条的值: window.scrollY window.scrollX 桌面浏览器中想要获取滚动条的值是通过document.scrollTop和document.scrollLeft得到的 ...

  6. Java 网络编程---分布式文件协同编辑器设计与实现

    目录: 第一部分:Java网络编程知识 (一)简单的Http请求 一般浏览网页时,使用的时Ip地址,而IP(Internet Protocol,互联网协议)目前主要是IPv4和IPv6. IP地址是一 ...

  7. java基础总结——数组

    数组需要掌握的: 1.数组的定义 2.数组的内存分配及特点 3.数组操作常见问题 4.数组常见操作 5.数组中的数组(理解) 数组唯一属性:length,即数组的长度. 1.数组定义 格式一: 元素类 ...

  8. mac/unix系统:C++实现一个端口扫描器

    在比较早以前,我用过S扫描器, 以及大名鼎鼎的nmap扫描器, 可以快速扫描某个主机开放的端口, 今天使用C实现这样一个软件, 编译环境为Mac, 系统版本10.11.6: #include < ...

  9. JMXMP SSL

    http://docs.oracle.com/javase/7/docs/technotes/guides/management/agent.html http://docs.oracle.com/c ...

  10. RFC 2327--SDP

    Network Working Group M. Handley Request for Comments: 2327 V. Jacobson Category: Standards Track IS ...