Я знаю, что был задан похожий вопрос, например this , но я не могу найти ответ на этот вопрос.Я новичок в реакции-родной, а также.Мне нужно извлечь данные из хранилища. Вот как я сохраняю значение после вызова API
_storeData = async response => {
it AsyncStorage.setItem(token, (response))
.then(() => {
this.setState({
shouldLoad : false
});
console.log("Data saved successfully" + response);
this.props.navigation.navigate("HomeScreen");
})
.catch(() => {
console.log("There was an error saving the data");
});
};
Так я пытался извлечь данные из AsyncStorage
AsyncStorage.getItem(token).then((token) => {
this.setState({
token : tokentoken,
currentState : false
});
});
То, чего я пытаюсь достичь - это управление сессиями.При входе в систему я сохраняю sessionToken в AsyncStorage, и когда приложение запускается снова, мне нужно получить данные обратно.Я пробовал другой код, но не получаю вывод.
Любая помощь будет оценена Спасибо заранее
РЕДАКТИРОВАТЬ 1.
Я вставляю весь код здесь, чтобы любой мог указать, куда я идунеправильно.
export default class App extends Component {
constructor() {
super();
this.state = {
token: null,
currentState : true,
};
}
componentDidMount() {
AsyncStorage.getItem(token).then((token) => {
this.setState({
token : tokentoken,
currentState : false
});
});
}
render() {
var ggg = this.state.token;
console.log(ggg);
if(this.state.currentState === false){
if (this.state.token === "" || this.state.token === null) {
return <LoginNav />;
} else {
return <HomeNavigatorNew />;
}
}
else{
return ( <ActivityIndicator
animating={true}
style={{
flex: 1,
alignItems: 'center',
justifyContent: 'center',
height: 80
}}
size="large"
/>)
}
}
}
РЕДАКТИРОВАТЬ 2.
Я писал вышеуказанный код в App.js. Я просто переместил весь код в Login.js (другой файл)и это просто сработало.Это что-нибудь значит? ..?Это как то, что я должен написать код восстановления в App.js
EDIT 3. Спасибо @Mohammed Ashfaq и @Samer Murad за быстрый ответ.В коде Sammrs я заметил, что AsyncStorage импортируется в фигурных скобках не без них.Я импортировал без них.Я упоминал в своем EDIT 2, что код работал в другом файле, в котором AsyncStorage заключен в фигурные скобки.Оставляя измененный рабочий код для дальнейшего использования для кого-то
import React, {Component} from "react";
import {AsyncStorage, ActivityIndicator} from "react-native";
import { createStackNavigator} from "react-navigation";
export default class App extends Component {
constructor() {
super();
this.state = {
token: null,
currentState: true,
};
}
_retrieveData = async () => {
console.log("Data retrieved successfully");
// var tokenRetrieved = AsyncStorage.getItem('LoginTocken');
await AsyncStorage.getItem('LoginTocken')
.then(value => {
return (value);
})
.then ( valueJson => {
this.setState({
token : valueJson,
currentState : false
});
console.log("Data retrieved successfully", valueJson);
})
.catch((error) => {
console.log("There was an error retrieving the data" + error);
});
};
handleSession = async () => {
console.log("handleSession");
this._retrieveData().catch((error) => {console.log("error is " +
error);});
};
componentWillMount() {
console.log("componentWillMount");
this.handleSession();
}
render() {
if (this.state.token === "" || this.state.token === null) {
return <LoginNav / > ;
} else {
return <HomeNavigatorNew / > ;
}
}
}
Я понятия не имею, почему и как это имеет значение, когда какой-то импорт выполняется без фигурных скобок ** {} **, где некоторые сделаныс ними.Если кто-нибудь знает, почему фигурные абзацы иногда опускаются / добавляются, я прошу их оставить ответ.