Nicht zur Arbeit mit React Native Asynchrone Speicher
Ich habe Schwierigkeiten mit der Arbeit mit react native asynchrone Speicher.
Die meisten der Zeit, mein code springt, die aktuelle Ausführung und geht zu der nächsten Zeile, ohne dass die Ergebnisse aus der aktuellen Zeile. Ich bin immer Fehler die meiste Zeit.
Habe ich versucht, dieses Beispiel-
'use strict';
var React = require('react-native');
var {
AsyncStorage,
PickerIOS,
Text,
View
} = React;
var PickerItemIOS = PickerIOS.Item;
var STORAGE_KEY = '@AsyncStorageExample:key';
var COLORS = ['red', 'orange', 'yellow', 'green', 'blue'];
var BasicStorageExample = React.createClass({
componentDidMount() {
this._loadInitialState().done();
},
async _loadInitialState() {
try {
var value = await AsyncStorage.getItem(STORAGE_KEY);
if (value !== null){
this.setState({selectedValue: value});
this._appendMessage('Recovered selection from disk: ' + value);
} else {
this._appendMessage('Initialized with no selection on disk.');
}
} catch (error) {
this._appendMessage('AsyncStorage error: ' + error.message);
}
},
getInitialState() {
return {
selectedValue: COLORS[0],
messages: [],
};
},
render() {
var color = this.state.selectedValue;
return (
<View>
<PickerIOS
selectedValue={color}
onValueChange={this._onValueChange}>
{COLORS.map((value) => (
<PickerItemIOS
key={value}
value={value}
label={value}
/>
))}
</PickerIOS>
<Text>
{'Selected: '}
<Text style={{color}}>
{this.state.selectedValue}
</Text>
</Text>
<Text>{' '}</Text>
<Text onPress={this._removeStorage}>
Press here to remove from storage.
</Text>
<Text>{' '}</Text>
<Text>Messages:</Text>
{this.state.messages.map((m) => <Text key={m}>{m}</Text>)}
</View>
);
},
async _onValueChange(selectedValue) {
this.setState({selectedValue});
try {
await AsyncStorage.setItem(STORAGE_KEY, selectedValue);
this._appendMessage('Saved selection to disk: ' + selectedValue);
} catch (error) {
this._appendMessage('AsyncStorage error: ' + error.message);
}
},
async _removeStorage() {
try {
await AsyncStorage.removeItem(STORAGE_KEY);
this._appendMessage('Selection removed from disk.');
} catch (error) {
this._appendMessage('AsyncStorage error: ' + error.message);
}
},
_appendMessage(message) {
this.setState({messages: this.state.messages.concat(message)});
},
});
exports.title = 'AsyncStorage';
exports.description = 'Asynchronous local disk storage.';
exports.examples = [
{
title: 'Basics - getItem, setItem, removeItem',
render(): ReactElement { return <BasicStorageExample />; }
},
];
Dieser funktioniert. Aber, meine Funktionen funktionieren nicht wie erwartet. Ich bin immer undefined
.
- Können Sie genauere Angaben über den Fehler sind Sie immer? Auch, an welcher Stelle im code du immer diese Fehler?
- Ich bin nicht immer alle Fehler. Die Funktionen Bestellung nicht ausführen, wie ich möchte. Lokesh Antwort scheint zu sein, eine Lösung für mich. das git-repo sieht so einfach zu implementieren ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach dem Lesen deiner Frage ist, das erste, was ich empfand, ist "vielleicht" Sie sind neu ES7, speziell
async-await
. Bitte Lesen Sie über async-await Funktionen im ES7, das realeased werden später in diesem Jahr(2016).Ihre Funktionen
async
in der Natur. Setzen Sie das Stichwort vor die Funktion. Undawait
verwendet werden, wo Sie einen Aufruf der Funktion.Konkret schlage ich vor, Sie reagieren-native-store repo für Ihre Entwicklung. Reagieren die Einheimischen Jungs haben gesagt, verwenden Sie diese und andere Implementierungen deutlich Vereinbarung
AsyncStorage
ist ein bisschen komplexer, mit zu arbeiten.Für andere, die noch nicht dieses Problem lösen: import AsyncStorage aus reagieren-native, anstatt zu Reagieren.
Falls jemand mit
AsyncStorage.multiSet([])
, stellen Sie sicher, dass keine Ihrer Werte istnull
oderundefined
. Sonst funktioniert es nicht und und nicht legen Wert auf die gültigen Schlüssel-Wert-Paaren.