react-native 项目实战 -- 新闻客户端(5) -- 完善首页列表数据
1.Home.js:
- /**
- * 首页
- */
- import React, { Component } from 'react';
- import {
- AppRegistry,
- StyleSheet,
- Text,
- View,
- ListView,
- Image,
- TouchableOpacity,
- Platform
- } from 'react-native';
- // 导入本地json数据
- var LocalData = require('../LocalData.json');
- var Home = React.createClass({
- // 不可改变的默认值
- getDefaultProps(){
- return{
- url_api:'http://c.m.163.com/nc/article/headline/T1348647853363/0-20.html',
- key_word:'T1348647853363'
- }
- },
- // 初始化
- getInitialState(){
- return{
- // ListView头部轮播图的数据源
- headerDataArr:[],
- // cell的数据源
- dataSource: new ListView.DataSource({
- rowHasChanged:(r1,r2)=>{r1 !== r2}
- })
- }
- },
- render() {
- return (
- <View style={styles.container}>
- {/*导航条*/}
- {this.renderNavBar()}
- <ListView
- dataSource={this.state.dataSource}
- renderRow={this.renderRow}
- renderHeader={this.renderHeader}
- />
- </View>
- );
- },
- // 导航条
- renderNavBar(){
- return(
- <View style={styles.navOutViewStyle}>
- <Text style={{color:'white',fontSize:16,fontWeight:'bold'}}>首页</Text>
- </View>
- )
- },
- // 返回ListView头部视图
- renderHeader(){
- return(
- <View>
- <Text>头部视图</Text>
- </View>
- )
- },
- // 返回LisView中的单个cell
- renderRow(rowData){
- return(
- <TouchableOpacity activeOpacity={0.5}>
- <View style={styles.cellViewStyle}>
- <Image source={{uri:rowData.imgsrc}} style={styles.imgStyle} />
- <View style={styles.rightViewStyle}>
- <Text style={styles.mainTitleStyle}>{rowData.title}</Text>
- <Text style={styles.subTitleStyle}>{rowData.digest}</Text>
- </View>
- </View>
- </TouchableOpacity>
- )
- },
- // 组件加载完毕之后调用
- componentDidMount(){
- // 请求网络数据
- this.loadDataFromNet();
- },
- // 请求网络数据的方法
- loadDataFromNet(){
- fetch(this.props.url_api)
- .then((response)=>response.json())
- .then((responseData)=>{
- // 拿到需要的数据
- var jsonData = responseData[this.props.key_word];
- // 处理数据
- this.dealWithData(jsonData);
- })
- .catch((error)=>{
- if(error){
- // 网络请求失败,就用本地数据
- console.log('网络请求失败');
- var jsonData = LocalData[this.props.key_word];
- this.dealWithData(jsonData);
- }
- })
- },
- // 处理网络数据的细节方法
- dealWithData(jsonData){
- // 定义临时变量
- var headerArr = [], listDataArr = [];
- // 遍历拿到的json数据
- for (var i=0;i<jsonData.length;i++){
- // 取出单个对象
- var data = jsonData[i];
- if(data.hasAD == 1){
- // 取出广告数据
- headerArr = data.ads;
- }else {
- // 非广告数据(行数据)
- listDataArr.push(data)
- }
- }
- // 更新状态机
- this.setState({
- // ListView头部轮播图的数据源
- headerDataArr:headerArr,
- // cell的数据源
- dataSource:this.state.dataSource.cloneWithRows(listDataArr),
- });
- console.log(headerArr,listDataArr);
- },
- });
- const styles = StyleSheet.create({
- // 导航条视图
- navOutViewStyle:{
- height:Platform.OS === 'ios' ? 64 : 44,
- backgroundColor:'#468AFF',
- // 主轴方向
- flexDirection:'row',
- // 侧轴对齐方式 垂直居中
- alignItems:'center',
- // 主轴方向居中
- justifyContent:'center',
- },
- container: {
- flex: 1,
- backgroundColor: '#F5FCFF',
- },
- cellViewStyle:{
- // 主轴方向
- flexDirection:'row',
- padding:10,
- // 侧轴对齐方式
- alignItems:'center',
- // 设置下边框
- borderBottomColor:'#e8e8e8',
- borderBottomWidth:0.8,
- },
- imgStyle:{
- width:90,
- width:90,
- },
- rightViewStyle:{
- width:260,
- marginLeft:10,
- },
- mainTitleStyle:{
- fontSize:16,
- marginBottom:5,
- },
- subTitleStyle:{
- fontSize:14,
- color:'gray',
- },
- });
- // 输出类
- module.exports = Home;
2.效果图
react-native 项目实战 -- 新闻客户端(5) -- 完善首页列表数据的更多相关文章
- 【腾讯Bugly干货分享】React Native项目实战总结
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e16a7640ad7b4682c64a7 “8小时内拼工作,8小时外拼成长 ...
- React Native 项目实战-Tamic
layout: post title: React Native 项目实战 date: 2016-10-18 15:02:29 +0800 comments: true categories: Rea ...
- React Native 项目实战 -- DoubanProject
引言:本文是我研究react-native时写的一个简单的demo,代码里有详细的注释,好废话不多说,直接上代码. 1.项目目录 2.index.android.js /** * index.andr ...
- React Native项目实战
算是学习React Native的一次项目总结吧,目的还是提高自己. 包含的内容: 1>仿"美团"页面的实现; 2>封装项目中和自己常用的一些组件; 3>学习别人 ...
- react-native 项目实战 -- 新闻客户端(6) -- 完善ListView头部视图
1.因为需要定时器,所以我们要cd到当前项目根目录下安装这个类库: $ npm i react-timer-mixin --save 2.Component/ScrollImage.js /** * ...
- react-native 项目实战 -- 新闻客户端(2) -- 完善TabBar
1.创建 drawable-xxhdpi 文件夹,保存 TabBar 的 icon图标 android -- app -- src -- main -- res -- drawab ...
- react-native 项目实战 -- 新闻客户端(7) -- 新闻详情页
http://c.3g.163.com/nc/article/BUH64L0J00031H2L/full.html 观察这个地址,BUH64L0J00031H2L 就是每条新闻数据里的postid. ...
- react-native 项目实战 -- 新闻客户端(4) -- 请求网络数据
1.Home.js /** * 首页 */ import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Te ...
- react-native 项目实战 -- 新闻客户端(3) -- 包装导航控制器
1.修改后的 Main.js /** * 主页面 */ import React, { Component } from 'react'; import { StyleSheet, Text, Vie ...
随机推荐
- What does this bit-manipulating function do?
http://stackoverflow.com/questions/8637142/what-does-this-bit-manipulating-function-do unsigned long ...
- (七)ubuntu下编译openwrt内核的环境配置
首先安装基本开发环境: sudo apt-get install ssh vim samba tftp nfs 安装编译openwrt须要的包: 解压openwrt包编译出错: Build depen ...
- selenium访问百度 然后获取百度logo的截图
#!/usr/bin/env python # encoding: utf-8 import time from selenium import webdriver from PIL import I ...
- C++文件(夹)选择对话框
由于各种应用,我们需要调用系统的打开文件对话框或者打开文件夹对话框,或两者兼有.今遇到这个情况已经解决,特写下这篇博文. 1.打开文件对话框常用的方法是使用系统的CFileDialog.这里介绍另外一 ...
- springBoot Ribbon 负载均衡
1.依赖引用 <!-- 引入关于 eureka-server的依赖 --> <dependency> <groupId>org.springframework.cl ...
- [thinkphp] 如何解析ajaxReturn返回的json字符串
success: function(data){ var dataObj=eval("("+data+")");//转换为json对象 alert(dataOb ...
- (转载)管道命令和xargs的区别(经典解释)
一直弄不懂,管道不就是把前一个命令的结果作为参数给下一个命令吗,那在 | 后面加不加xargs有什么区别 NewUserFF 写道:懒蜗牛Gentoo 写道:管道是实现“将前面的标准输出作为后面的标准 ...
- Extract - <<凤凰牌老熊-现代支付系统设计>>
本文摘录自: http://blog.lixf.cn/essay/2017/04/01/concept-01-overview/ 一.支付概述-- 1. 支付与交易 交易过程: 交易的存在是支付发生的 ...
- ZOJ1027 Travelling Fee(DP+SPFA)
给一张有向无环图,边都有花费,从某点到某点走的那条路径上的那一条花费最多的边可以省掉,问从起点到终点的最少花费的多少, 往DP想的话,就可以写出这个状态dp[u][mx],表示到达u点已经省掉的花费为 ...
- JDBC-登陆功能实现
1.user.java package songyan.jdbc.entity; import java.util.Date; public class User { private int id; ...