react-native-gifted-listview(一)

来源:互联网 发布:天球仪软件 编辑:程序博客网 时间:2024/06/08 14:48

for

use gifted-listview 显示列表

step

  1. list.js
    /*  use react-native-gifted-listview for ijoy list show*/import React,{Component} from 'react';import {  View,  Text,  ListView,  StyleSheet,  Dimensions,  TouchableHighlight} from 'react-native';import DataRepository from './DataRepository';import GiftedListView from 'react-native-gifted-listview';const repository=new DataRepository();const height=Dimensions.get("window").height;const toobarHeight=59;const sectionHeight=height-toobarHeight;export default class List extends Component{  constructor(){    super();    const ds=new ListView.DataSource({rowHasChanged:(r1,r2)=>r1!==r2});    this.state={      DS:ds.cloneWithRows([]),      loaded:false,      dataArray:[]    }  }  fetchHospital(){  repository.fetchHospital()   .then((dataArray)=>{      console.log(dataArray);      this.setState({        DS:this.state.DS.cloneWithRows(dataArray),        loaded:true,        dataArray:dataArray      })   })   .catch((error)=>{     console.error(error);   })   .done();}  componentDidMount(){    const tt=this.fetchHospital();    console.log('----------------');    console.log(tt);  }  _onFetch=(page = 1, callback, options)=> {   setTimeout(() => {     var rows =this.state.dataArray;     if (page === 3) {       callback(rows, {         allLoaded: true, // the end of the list is reached       });     } else {       callback(rows);     }   }, 1000); // simulating network fetching }  _renderRowView=(rowData)=> {   return (     <TouchableHighlight       style={styles.row}       underlayColor='#c8c7cc'     >       <Text>{rowData.name}</Text>     </TouchableHighlight>   ); }  render(){    if(this.state.loaded===false)return (<View><Text>正在加载</Text></View>)    return(      <View style={styles.container}>        <View style={styles.navBar} />        <GiftedListView          rowView={this._renderRowView}          onFetch={this._onFetch}          firstLoader={true} // display a loader for the first fetching          pagination={true} // enable infinite scrolling using touch to load more          refreshable={true} // enable pull-to-refresh for iOS and touch-to-refresh for Android          withSections={false} // enable sections          enableEmptySections={true}          customStyles={{            paginationView: {              backgroundColor: '#eee',            },          }}          refreshableTintColor="blue"        />      </View>    );  }}const styles=StyleSheet.create({  container: {   flex: 1,   backgroundColor: '#FFF', }, navBar: {   height: 64,   backgroundColor: '#CCC' }, row: {   padding: 10,   height: 44, }})
  1. DataRepository.js
'use strict';const API_HOSPITAL_LIST="http://www.tngou.net/api/hospital/list";function DataRepository() { // Singleton pattern  if (typeof DataRepository.instance === 'object') {    return DataRepository.instance;  }  DataRepository.instance = this;}DataRepository.prototype.fetchHospital=function(callback?:?(error:?Error,result:?Object)=>void){    const reqUrl=API_HOSPITAL_LIST;    const networking=this._safeFetch(reqUrl);    const merged=new Promise((resolve,reject)=>{      Promise.all([networking])        .then((values)=>{           console.log('-------------resulte---------------');           console.log(values);           resolve(values[0]);        })    });    return merged;}DataRepository.prototype._safeFetch=function(reqUrl:string){  console.log(reqUrl);  return new Promise((resolve,reject)=>{    fetch(reqUrl)    .then((response)=>response.json())    .then((responseData)=>{      console.log(responseData);      let result=[];      result=responseData.tngou;       resolve(result);    })    .catch((error)=>{      console.error(error);      resolve(null);    })  }  );}module.exports=DataRepository;

last update 2016-08-31

0 1
原创粉丝点击