2017-12-15 12 views
0

Wenn ich meine Anwendung ausführen, wenn ich Sitzungsdaten in AsyncStorage habe, ich lade es, aber es wird geladen, nachdem die Komponente eingehängt und an mainContainer als undefined gesendet, ich muss zuerst die Daten laden und dann senden es MainContainerAsyncStorage reagieren Native Sitzung

export default class AppContainer extends Component<{}> { 
    constructor(props) { 
     super(props); 

     this.state = { 
      data: this.props.data, 
      authtoken: this.props.authtoken, 
      sucursal: this.props.sucursal 
     }; 
    } 


    componentWillMount() { 
     if(AsyncStorage.getItem('authtoken') !== null){ 
     this.getDataFromStorage(); 
     } 
    } 

    async getDataFromStorage() { 
     AsyncStorage.getItem('authtoken').then((token) => { 
      this.setState({ authtoken: token }); 
      console.log(this.state.authtoken); 
     }); 
     AsyncStorage.getItem('data').then((dataStorage) => { 
      this.setState({ data: JSON.parse(dataStorage) }); 
      console.log(this.state.data); 
     }); 
    } 

    componentDidMount() { 
     console.log(this.state.data); 
     console.log(this.state.authtoken); 

    } 




    render(props) { 
     return (
      <View style={styles.bigContainer}> 
       <Header/> 
       <MainContainer data={this.state.data} authtoken={this.state.authtoken} sucursal={this.state.sucursal}/> 
      </View> 
     ); 
    } 

} 
+0

Mögliche Duplikate von [Reactive Native AsyncStorage ruft Daten nach dem Rendern ab] (https://stackoverflow.com/questions/33553112/react-native-asyncstorage-fetches-data-after-rendering) – JSnow

Antwort

0

Ihr machen in setzen, wenn die Anweisung von Daten

wenn Daten dann sonst

0

einführen Loading-Anzeige auf Ihre Komponentenbaum Laden laden. Überprüfen Sie den Wert von this.state.data. Stoppen Sie den Indikator erst, wenn Sie Daten gerendert haben.

render(props) { 
    return (
     <View style={styles.bigContainer}> 
      <ActivityIndicator animating={!this.state.data} size="large" color="#0000ff" /> 
      <Header/> 
      <MainContainer data={this.state.data} authtoken={this.state.authtoken} sucursal={this.state.sucursal}/> 
     </View> 
    ); 
} 

Möglicherweise müssen Sie das Styling ändern.

Verwandte Themen