2017-02-21 4 views
0

Ich habe App.js Datei und es ist der Stamm meiner Anwendung (beide iOS und Android Verweis darauf).
Ich habe einen Wert, den ich in AsyncStorage aufbewahre, dass ich vor app.js render Methode aufgerufen werden muss.
Problem ist, dass es async spät ist und ich kann diesen Wert nicht bekommen.Was ist der beste Weg, um Wert von AsyncStorage zu erhalten, bevor ganze App laden

class App extends React.Component { 
    constructor(props) { 
    super(props); 
    this.init() 
    } 
    async init() { 
    try { 
    const value = await AsyncStorage.getItem('@myPoorValue:key'); 
    if (value !== null){ 
    ... 
    } 
} catch (error) {} 
    } 
} 
... 
render (... 

Ich hoffe, dass ich gut erklärt, was ist mein Problem hier.
Ich weiß, dass es keine Möglichkeit gibt, es synchron zu machen (ich möchte das), aber ich weiß nicht, was ich in dieser Situation tun soll.
Um es ein wenig besser zu erklären benutze ich I18n und ich manuell setzen I18n.locale auf einen Wert und andere Komponenten erhalten den Standardwert, bevor ich es manuell einstellen.
Nur zu beachten, ich verwende auch Redux und ich übergeben ausgewählten Wert zu ihm.

+0

Ich denke, Sie haben appNavigator.js? – Codesingh

Antwort

1

versuchen Sie Folgendes:

... 
 

 
constructor(props) { 
 
    super(props) 
 
    
 
    this state = { 
 
    isLoading: true 
 
    } 
 
} 
 
    
 
async componentDidMount() { 
 
    await this.init() 
 
    
 
    // you might want to do the I18N setup here 
 
    this.setState({ 
 
    isLoading: false 
 
    }) 
 
} 
 

 
async init() { 
 
    const value = await AsyncStorage.getItem('@myPoorValue:key') 
 
    ... 
 
} 
 

 
...

der Sache ist, dass init() ein Versprechen zurück, und Sie müssen warten, bis es gelöst wird. Das ist, wenn await zur Rettung kommt.

Sie müssen auch einige Loader einrichten, die beim ersten Rendern vorhanden sein werden, und den Status umschalten, um ihn durch das tatsächliche Markup zu ersetzen, nachdem der AsyncStorage-Wert abgerufen wurde. Ich habe es in den Code eingefügt, aber Sie könnten stattdessen eine Redux-Aktion auslösen, abhängig von Ihrer Einrichtung.

Verwandte Themen