博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React-Native 之 GD (六)无数据情况处理
阅读量:5890 次
发布时间:2019-06-19

本文共 4167 字,大约阅读时间需要 13 分钟。

1.还是网络问题,在网络出现问题或者无法加载数据的时候,一般我们会展示空白页,在空白页中提示 无数据 之类的提示,比较好的还会使用 指示器 的方式告诉用户网络出现问题等等。

这边我们做以下处理,当无数据时,我们就先初始化基础界面,然后展示 提示页面,等到有数据时,再重新渲染数据。

步骤一:首先设置 无数据 页面

GDNoDataView.js

/** * 无数据情况 提示页 */import React, { Component } from 'react';import {    StyleSheet,    Text,    View,} from 'react-native';export default class GDNoDataView extends Component {    render() {        return (            
无数据
); }}const styles = StyleSheet.create({ container: { flex: 1, justifyContent:'center', alignItems:'center', }, textStyle: { fontSize: 21, color: 'gray', }});

 

步骤二:接着,没有数据的时候我们进行一些处理就可以了

GDHalfHourHot.js 调用

/** * 近半小时热门 */import React, { Component } from 'react';import {    StyleSheet,    Text,    View,    TouchableOpacity,    Image,    ListView,    Dimensions,    DeviceEventEmitter,} from 'react-native';// 获取屏幕宽高const {width, height} = Dimensions.get('window');// 引入自定义导航栏组件import CommunalNavBar from '../main/GDCommunalNavBar';// 引入 cellimport CommunalHotCell from '../main/GDCommunalHotCell';// 引入 空白页组件import NoDataView from '../main/GDNoDataView';export default class GDHalfHourHot extends Component {    // 构造    constructor(props) {        super(props);        // 初始状态        this.state = {            dataSource: new ListView.DataSource({rowHasChanged:(r1, r2) => r1 !== r2}), // 数据源 优化            loaded: false, // 用于判断是否显示空白页        };        // 绑定        this.fetchData = this.fetchData.bind(this);    }    // 网络请求    fetchData() {        // 测试没用数据的情况        setTimeout(() => {            fetch('http://guangdiu.com/api/gethots.php')  // 请求地址            .then((response) => response.json())  // 定义名称 将数据转为json格式            .then((responseData) => { // 处理数据                // 修改dataSource的值                this.setState({                    dataSource: this.state.dataSource.cloneWithRows(responseData.data),                    loaded:true,                });            })            .done(); // 结束        },3000)    }    // 跳回首页    popToHome() {        this.props.navigator.pop();    }    // 返回中间按钮    renderTitleItem() {        return(            
近半小时热门
); } // 返回右边按钮 renderRightItem() { return(
{this.popToHome()}} >
关闭
); } // 判断显示列表 还是 显示空白页 renderListView() { if(this.state.loaded === false) { // 显示空白页 return(
); }else{ return(
); } } // 返回 listView 头部 renderHeader() { return(
根据每条折扣的点击进行统计,每5分钟更新一次
); } // 返回每一行cell的样式 renderRow(rowData) { // 使用cell组件 return(
); } componentWillMount() { // 向GDMain.js 发送通知 隐藏tabBar DeviceEventEmitter.emit('isHiddenTabBar', true); } componentWillUnmount() { // 向GDMain.js 发送通知 显示tabBar DeviceEventEmitter.emit('isHiddenTabBar', false); } // 生命周期 组件渲染完成 已经出现在dom文档里 componentDidMount() { // 请求数据 this.fetchData(); } render() { return (
{/* 导航栏样式 */}
this.renderTitleItem()} rightItem = {() => this.renderRightItem()} /> {/* 根据网络状态决定是否渲染 listView */} {this.renderListView()}
); }}const styles = StyleSheet.create({ container: { flex:1, alignItems: 'center', }, navbarTitleItemStyle: { fontSize:17, color:'black', marginLeft:50 }, navbarRightItemStyle: { fontSize:17, color:'rgba(123,178,114,1.0)', marginRight:15 }, headerPromptStyle: { height:44, width:width, backgroundColor:'rgba(239,239,239,0.5)', justifyContent:'center', alignItems:'center' }, listViewStyle: { width:width, }});

效果图:

 

转载于:https://www.cnblogs.com/crazycode2/p/7436381.html

你可能感兴趣的文章
iOS8中定位服务的变化(CLLocationManager协议方法不响应,无法回掉GPS方法,不出现获取权限提示)...
查看>>
BeanUtils\DBUtils
查看>>
VC 创建托盘,托盘tooltip。右键托盘菜单,点击别的地方会隐藏掉的问题。
查看>>
第一天,新的定义
查看>>
WPF EventSetter Handler Command
查看>>
polya定理,环形涂色
查看>>
day4-装饰器前奏
查看>>
【Jest】笔记三:全局变量
查看>>
forward和redirect的区别
查看>>
使用JavaMail完成邮件的编写
查看>>
洛谷P1576 最小花费
查看>>
封装了一个类,可生成验证码,缩略图,及水印图
查看>>
文件服务器 之 Debian下pureftpd的安装心得
查看>>
第一阶段项目总结
查看>>
Java集合详解
查看>>
myeclilpse打开文件所在位置的图标消失后的找回方法
查看>>
Java面向对象编程概述
查看>>
Android利用文本分割拼接开发一个花藤文字生成
查看>>
哈夫曼树的实现
查看>>
12-18Windows窗体应用小程序之记事本(1)
查看>>