1.Home.js:

  1. /**
  2. * 首页
  3. */
  4. import React, { Component } from 'react';
  5. import {
  6. AppRegistry,
  7. StyleSheet,
  8. Text,
  9. View,
  10. ListView,
  11. Image,
  12. TouchableOpacity,
  13. Platform
  14. } from 'react-native';
  15.  
  16. // 导入本地json数据
  17. var LocalData = require('../LocalData.json');
  18.  
  19. var Home = React.createClass({
  20. // 不可改变的默认值
  21. getDefaultProps(){
  22. return{
  23. url_api:'http://c.m.163.com/nc/article/headline/T1348647853363/0-20.html',
  24. key_word:'T1348647853363'
  25. }
  26. },
  27.  
  28. // 初始化
  29. getInitialState(){
  30. return{
  31. // ListView头部轮播图的数据源
  32. headerDataArr:[],
  33. // cell的数据源
  34. dataSource: new ListView.DataSource({
  35. rowHasChanged:(r1,r2)=>{r1 !== r2}
  36. })
  37. }
  38. },
  39.  
  40. render() {
  41. return (
  42. <View style={styles.container}>
  43. {/*导航条*/}
  44. {this.renderNavBar()}
  45. <ListView
  46. dataSource={this.state.dataSource}
  47. renderRow={this.renderRow}
  48. renderHeader={this.renderHeader}
  49. />
  50. </View>
  51. );
  52. },
  53.  
  54. // 导航条
  55. renderNavBar(){
  56. return(
  57. <View style={styles.navOutViewStyle}>
  58. <Text style={{color:'white',fontSize:16,fontWeight:'bold'}}>首页</Text>
  59. </View>
  60. )
  61. },
  62.  
  63. // 返回ListView头部视图
  64. renderHeader(){
  65. return(
  66. <View>
  67. <Text>头部视图</Text>
  68. </View>
  69. )
  70. },
  71.  
  72. // 返回LisView中的单个cell
  73. renderRow(rowData){
  74. return(
  75. <TouchableOpacity activeOpacity={0.5}>
  76. <View style={styles.cellViewStyle}>
  77. <Image source={{uri:rowData.imgsrc}} style={styles.imgStyle} />
  78. <View style={styles.rightViewStyle}>
  79. <Text style={styles.mainTitleStyle}>{rowData.title}</Text>
  80. <Text style={styles.subTitleStyle}>{rowData.digest}</Text>
  81. </View>
  82. </View>
  83. </TouchableOpacity>
  84. )
  85. },
  86.  
  87. // 组件加载完毕之后调用
  88. componentDidMount(){
  89. // 请求网络数据
  90. this.loadDataFromNet();
  91. },
  92.  
  93. // 请求网络数据的方法
  94. loadDataFromNet(){
  95. fetch(this.props.url_api)
  96. .then((response)=>response.json())
  97. .then((responseData)=>{
  98. // 拿到需要的数据
  99. var jsonData = responseData[this.props.key_word];
  100.  
  101. // 处理数据
  102. this.dealWithData(jsonData);
  103. })
  104. .catch((error)=>{
  105. if(error){
  106. // 网络请求失败,就用本地数据
  107. console.log('网络请求失败');
  108. var jsonData = LocalData[this.props.key_word];
  109. this.dealWithData(jsonData);
  110. }
  111. })
  112. },
  113.  
  114. // 处理网络数据的细节方法
  115. dealWithData(jsonData){
  116. // 定义临时变量
  117. var headerArr = [], listDataArr = [];
  118. // 遍历拿到的json数据
  119. for (var i=0;i<jsonData.length;i++){
  120. // 取出单个对象
  121. var data = jsonData[i];
  122. if(data.hasAD == 1){
  123. // 取出广告数据
  124. headerArr = data.ads;
  125. }else {
  126. // 非广告数据(行数据)
  127. listDataArr.push(data)
  128. }
  129. }
  130.  
  131. // 更新状态机
  132. this.setState({
  133. // ListView头部轮播图的数据源
  134. headerDataArr:headerArr,
  135. // cell的数据源
  136. dataSource:this.state.dataSource.cloneWithRows(listDataArr),
  137. });
  138.  
  139. console.log(headerArr,listDataArr);
  140. },
  141. });
  142.  
  143. const styles = StyleSheet.create({
  144. // 导航条视图
  145. navOutViewStyle:{
  146. height:Platform.OS === 'ios' ? 64 : 44,
  147. backgroundColor:'#468AFF',
  148. // 主轴方向
  149. flexDirection:'row',
  150. // 侧轴对齐方式 垂直居中
  151. alignItems:'center',
  152. // 主轴方向居中
  153. justifyContent:'center',
  154. },
  155. container: {
  156. flex: 1,
  157. backgroundColor: '#F5FCFF',
  158. },
  159. cellViewStyle:{
  160. // 主轴方向
  161. flexDirection:'row',
  162. padding:10,
  163. // 侧轴对齐方式
  164. alignItems:'center',
  165. // 设置下边框
  166. borderBottomColor:'#e8e8e8',
  167. borderBottomWidth:0.8,
  168. },
  169. imgStyle:{
  170. width:90,
  171. width:90,
  172. },
  173. rightViewStyle:{
  174. width:260,
  175. marginLeft:10,
  176. },
  177. mainTitleStyle:{
  178. fontSize:16,
  179. marginBottom:5,
  180. },
  181. subTitleStyle:{
  182. fontSize:14,
  183. color:'gray',
  184. },
  185. });
  186.  
  187. // 输出类
  188. module.exports = Home;

2.效果图

react-native 项目实战 -- 新闻客户端(5) -- 完善首页列表数据的更多相关文章

  1. 【腾讯Bugly干货分享】React Native项目实战总结

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e16a7640ad7b4682c64a7 “8小时内拼工作,8小时外拼成长 ...

  2. React Native 项目实战-Tamic

    layout: post title: React Native 项目实战 date: 2016-10-18 15:02:29 +0800 comments: true categories: Rea ...

  3. React Native 项目实战 -- DoubanProject

    引言:本文是我研究react-native时写的一个简单的demo,代码里有详细的注释,好废话不多说,直接上代码. 1.项目目录 2.index.android.js /** * index.andr ...

  4. React Native项目实战

    算是学习React Native的一次项目总结吧,目的还是提高自己. 包含的内容: 1>仿"美团"页面的实现; 2>封装项目中和自己常用的一些组件; 3>学习别人 ...

  5. react-native 项目实战 -- 新闻客户端(6) -- 完善ListView头部视图

    1.因为需要定时器,所以我们要cd到当前项目根目录下安装这个类库: $ npm i react-timer-mixin --save 2.Component/ScrollImage.js /** * ...

  6. react-native 项目实战 -- 新闻客户端(2) -- 完善TabBar

    1.创建 drawable-xxhdpi 文件夹,保存 TabBar 的 icon图标 android  --  app  --  src  --  main  --  res  --  drawab ...

  7. react-native 项目实战 -- 新闻客户端(7) -- 新闻详情页

    http://c.3g.163.com/nc/article/BUH64L0J00031H2L/full.html 观察这个地址,BUH64L0J00031H2L 就是每条新闻数据里的postid.  ...

  8. react-native 项目实战 -- 新闻客户端(4) -- 请求网络数据

    1.Home.js /** * 首页 */ import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Te ...

  9. react-native 项目实战 -- 新闻客户端(3) -- 包装导航控制器

    1.修改后的 Main.js /** * 主页面 */ import React, { Component } from 'react'; import { StyleSheet, Text, Vie ...

随机推荐

  1. What does this bit-manipulating function do?

    http://stackoverflow.com/questions/8637142/what-does-this-bit-manipulating-function-do unsigned long ...

  2. (七)ubuntu下编译openwrt内核的环境配置

    首先安装基本开发环境: sudo apt-get install ssh vim samba tftp nfs 安装编译openwrt须要的包: 解压openwrt包编译出错: Build depen ...

  3. selenium访问百度 然后获取百度logo的截图

    #!/usr/bin/env python # encoding: utf-8 import time from selenium import webdriver from PIL import I ...

  4. C++文件(夹)选择对话框

    由于各种应用,我们需要调用系统的打开文件对话框或者打开文件夹对话框,或两者兼有.今遇到这个情况已经解决,特写下这篇博文. 1.打开文件对话框常用的方法是使用系统的CFileDialog.这里介绍另外一 ...

  5. springBoot Ribbon 负载均衡

    1.依赖引用 <!-- 引入关于 eureka-server的依赖 --> <dependency> <groupId>org.springframework.cl ...

  6. [thinkphp] 如何解析ajaxReturn返回的json字符串

    success: function(data){ var dataObj=eval("("+data+")");//转换为json对象 alert(dataOb ...

  7. (转载)管道命令和xargs的区别(经典解释)

    一直弄不懂,管道不就是把前一个命令的结果作为参数给下一个命令吗,那在 | 后面加不加xargs有什么区别 NewUserFF 写道:懒蜗牛Gentoo 写道:管道是实现“将前面的标准输出作为后面的标准 ...

  8. Extract - <<凤凰牌老熊-现代支付系统设计>>

    本文摘录自: http://blog.lixf.cn/essay/2017/04/01/concept-01-overview/ 一.支付概述-- 1. 支付与交易 交易过程: 交易的存在是支付发生的 ...

  9. ZOJ1027 Travelling Fee(DP+SPFA)

    给一张有向无环图,边都有花费,从某点到某点走的那条路径上的那一条花费最多的边可以省掉,问从起点到终点的最少花费的多少, 往DP想的话,就可以写出这个状态dp[u][mx],表示到达u点已经省掉的花费为 ...

  10. JDBC-登陆功能实现

    1.user.java package songyan.jdbc.entity; import java.util.Date; public class User { private int id; ...