热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用reactnative做一个简单的应用-06商品界面的实现

商品界面实现起来很简单,其实就是一个listview的使用:关于listview的使用,在官方文档里面已经介绍的很详细了。在这里我要提一个坑。listview在Android和iOS中的效果是不一样的,listview对iOS的支持已经很好了,但是对android很多属性都不支持。有些地方官方文档也说的模棱两可的,因此如果想做炫酷的上、下拉效果的话,建议做iOS

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

使用react-native做一个简单的应用-06商品界面的实现

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

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

下面看一下代码吧:

  1 'use strict'
  2 
  3 var React = require('react-native')
  4 import Icon from 'react-native-vector-icons/FontAwesome'
  5 import AniImage from '../components/AniImage'
  6 import AniRoll from '../components/AniRoll'
  7 var {
  8   Image,
  9   ListView,
 10   StyleSheet,
 11   Text,
 12   View,
 13   TouchableOpacity,
 14   Navigator,
 15   PropTypes
 16 } = React
 17 
 18 var REQUEST_URL = 'http://192.168.6.5:8888/getCommidity'
 19 
 20 class Commodity extends React.Component {
 21   static propTypes = {
 22     navigator: PropTypes.object,
 23     fetch: PropTypes.func
 24   };
 25   constructor (props) {
 26     super(props)
 27     this.state = {
 28       dataSource: new ListView.DataSource({
 29         rowHasChanged: (row1, row2) => row1 !== row2
 30       }),
 31       loaded: false
 32     }
 33   }
 34   componentDidMount () {
 35     this.fetchData()
 36   }
 37 
 38   fetchData () {
 39     fetch (REQUEST_URL)
 40     .then((response) => response.json())
 41     .then((responseData) => {
 42       this.setState({
 43         dataSource: this.state.dataSource.cloneWithRows(responseData),
 44         loaded: true
 45       })
 46     })
 47     .done()
 48   }
 49 
 50   render () {
 51     if (!this.state.loaded) {
 52       return this.renderLoadingView()
 53     }
 54 
 55     return (
 56       <ListView
 57         initialListSize={3}
 58         dataSource={this.state.dataSource}
 59         renderRow={this.renderCommidity.bind(this)}
 60         style={styles.listView}/>
 61     )
 62   }
 63 
 64   renderLoadingView () {
 65     return (
 66       
 67        
 68         
 69           正在加载图文。。。
 70         
 71       
 72     )
 73   }
 74 
 75   renderCommidity (commidities) {
 76     return (
 77       
 78         
 79           this.toCommodityScreen.bind(this, commidities)}>
 80             <AniImage
 81             type={'image'}
 82             inputRange={[0, 100]}
 83             outputRange={[0, 1]}
 84             color: rgba(0, 0, 0, 1)">{styles.aniImage}
 85             url={'http://192.168.6.5:8888/getImage?imgName=' + commidities.imgPath1} />
 86           
 87         
 88         
 89           
 90             {commidities.title}
 91           
 92         
 93         
 94           
 95             
 96             {commidities.love}
 97           
 98           
 99             
100               
101               {commidities.date}
102             
103           
104         
105         
106       
107     )
108   }
109 
110   toCommodityScreen (commidities) {
111     var commodity = commidities
112     let navigator = this.props.navigator
113     navigator.push({id: 'CommodityScreen', sceneConfig: Navigator.SceneConfigs.HorizontalSwipeJump, passProp: {commodity}})
114   }
115 }
116 
117 var styles = StyleSheet.create({
118   container: {
119     flex: 1,
120     flexDirection: 'column',
121     backgroundColor: '#ffffff'
122   },
123   txtContainer: {
124     flex: 1,
125     alignItems: 'center',
126     justifyContent: 'center',
127     backgroundColor: '#fffff'
128   },
129   aniImage: {
130     height: 330,
131     width: null
132   },
133   viewTopImage: {
134     height: 330,
135     width: null,
136     margin: 10
137   },
138   txtContent: {
139     fontSize: 16,
140     marginLeft: 5
141   },
142   viewTxtContent: {
143     marginLeft: 10,
144     marginRight: 10,
145     marginBottom: 5,
146     flex: 1
147   },
148   txtBottom: {
149     flex: 1,
150     fontSize: 12
151   },
152   viewBottom: {
153     marginLeft: 10,
154     marginRight: 10,
155     marginBottom: 5,
156     flex: 1,
157     flexDirection: 'row'
158   },
159   imageSplit: {
160     flex: 0.3,
161     backgroundColor: '#F0F0F0'
162   },
163   numberText: {
164     fontSize: 15,
165     marginLeft: 20
166   },
167   viewBottomLeft: {
168     flex: 1,
169     flexDirection: 'row'
170   },
171   viewBottomRight: {
172     flex: 1,
173     alignItems: 'flex-end'
174   },
175   viewBottomRightContainer: {
176     flex: 1,
177     flexDirection: 'row'
178   }
179 })
180 
181 module.exports = Commodity

一、构造方法:

1  constructor (props) {
2     super(props)
3     this.state = {
4       dataSource: new ListView.DataSource({
5         rowHasChanged: (row1, row2) => row1 !== row2
6       }),
7       loaded: false
8     }
9   }

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

二、fetchData方法

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

三、toCommodityScreen方法

进入商品的详情界面。


推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 本文介绍了如何在方法参数中指定一个对象的协议,以及如何调用符合该协议的方法。以一个具体的示例说明了如何在方法参数中指定一个UIView子类对象,并且该对象需要符合PixelUI协议,同时方法需要能够访问该对象的属性。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
author-avatar
橄榄村
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有