2017-03-24 1 views
0

J'ai suivi l'exemple de documentation sur AsyncStorage:AsyncStorage ne pas enregistrer l'état de changement - React natif

React Native - AsyncStorage docs

. donc, j'ai mis mon code:

var STORAGE_KEY = '@AsyncStorageExample:key';

et je définir ma classe avec cette fonction:

J'ai un état initial:

state={ 
    defineValor: 0, 
}; 

et la fonction componentDidMount et _loadInitialState:

componentDidMount() { 
this._loadInitialState().done(); 
}; 
_loadInitialState = async() => { 
try { 
    var value = await AsyncStorage.getItem(STORAGE_KEY); 
    if (value !== null){ 
    this.setState({defineValor: value}); 
    alert('Recovered selection from disk: ' + value); 
    } else { 
    alert('Initialized with no selection on disk.'); 
    } 
} catch (error) { 
    alert('AsyncStorage error: ' + error.message); 
} 
}; 

Donc je en fonction de changer l'état avec AsyncStorage, ainsi que dans la documentation:

changeState =() => { 
this.setState ({ 
    defineValor: 1 
}); 
try { 
    AsyncStorage.setItem(STORAGE_KEY, this.state.defineValor); 
    alert('Saved selection to disk: ' + this.state.defineValor); 
} catch (error) { 
    alert('AsyncStorage error: ' + error.message); 
} 
}; 

Alors, quand j'ouvrir l'application, tout le long du processus, alerte « Initialisé sans sélection sur le disque » et quand je l'appelle ma fonction changeState, il est en alerte "Sélection enregistrée sur le disque: 1". Mais quand je ferme de l'application et rouvre, l'état n'a pas été sauvé, et il est alerte "Initialisé avec aucune sélection sur le disque.". Qu'est-ce que je fais mal?

+0

probablement AsyncStorage définit la valeur avant l'état defineValor est mis à jour. setState dispose d'une fonction de rappel. Faites en sorte que le setItem AsyncStorage soit activé dans ce rappel. – Hariks

Répondre

1

setState a un rappel faire le AsyncStorage.setItem dans ce rappel. également AsyncStorage accepte uniquement chaîne en tant que valeur

this.setState({ defineValor: string },() => { 
    try { 
    AsyncStorage.setItem(STORAGE_KEY, this.state.defineValor); 
    alert('Saved selection to disk: ' + this.state.defineValor); 
    } catch (error) { 
    alert('AsyncStorage error: ' + error.message); 
    } 
}); 
+0

Bonjour, merci pour l'aide. Mais j'ai vraiment essayé, et ne fonctionne pas encore. Avez-vous une autre idée? –

+1

AsyncStorage accepte la valeur comme ** chaîne **, vous essayez de définir le numéro à droite. Essayez de définir une valeur de chaîne – Hariks

+0

Cela a fonctionné. C'était vraiment le problème. Merci beaucoup!!! –