2017-03-17 2 views
0

非同期要求でデータをフェッチしています。私はデータを表示する前にAPI要求が完了するのを待つ必要があることを知っています。残念ながら、データをロードするのを待つローダーを作成する方法がわかりません。私は反応するのが新しいので、それを実装するのにも役立つことがあれば、それは素晴らしいでしょう!ここに私の現在のコードである:ActivityIndicator使用して単純な例React Nativeでデータがフェッチされるまでローダーをレンダリングする方法

import React, { Component, PropTypes } from 'react'; 
import { View, Text, ListView, StyleSheet, TouchableHighlight} from 'react- native'; 
import Header from '../Components/Header'; 
import Api from '../Utility/Api'; 


export default class CalendarPage extends Component { 

constructor(props) { 
super(props); 
} 

async componentWillMount() { this.setState(
    {data: await Api.getDates()}, 

    ) 
} 

    render() { 
    return (
     <View style={{flex: 1}}> 
     <Header pageName="Calendar" navigator={this.props.navigator}/> 
     <View style = {{flex:9}}> 
      <View> 
       { this.state.data.days[0].items.map((item) => (
       <View> 
        <Text>{item.summary}</Text> 
        <Text>{item.start.dateTime}</Text> 
        <Text>{item.description}</Text> 
       </View> 
      ))} 
      </View> 
     </View> 
     </View> 
    ); 
    } 

}

+0

を行う私は状態はありませんので、もしあなたがデータローダを返すそうでない場合は、ローダを返し、その後、2つのリターンを行うことができると思います。あなたの初期状態をまだ設定していないと思います。 –

答えて

2

-

インポートActivityIndicator

import { View, Text, ListView, StyleSheet, TouchableHighlight, ActivityIndicator} from 'react- native'; 

data状態を設定はnullに

constructor(props) { 
    super(props); 
    this.state = { 
     data: null 
    } 
    } 

は条件付きレンダリング

render() { 
    if (!this.state.data) { 
     return (
     <ActivityIndicator 
      animating={true} 
      style={styles.indicator} 
      size="large" 
     /> 
    ); 
    } 

    return (
     <View style={{flex: 1}}> 
     <Header pageName="Calendar" navigator={this.props.navigator}/> 
     .... 
     .... 
     </View> 
    ); 
    } 
} 

インジケータスタイル

const styles = StyleSheet.create({ 
    indicator: { 
    flex: 1, 
    alignItems: 'center', 
    justifyContent: 'center', 
    height: 80 
    } 
}); 
関連する問題