Я очень плохо знаком с асинхронным хранилищем и реагирую нативно.Я пытаюсь асинхронно сохранять данные / json в постоянном хранилище.А затем прочитайте его обратно и покажите на интерфейсе пользователя.
Вот что я пробовал:
import React, {Component} from 'react';
import {Platform, StyleSheet, Text, View, FlatList, Image} from 'react-native';
import AsyncStorage from '@react-native-community/async-storage';
const instructions = Platform.select({
ios: 'Press Cmd+R to reload,\n' + 'Cmd+D or shake for dev menu',
android:
'Double tap R on your keyboard to reload,\n' +
'Shake or press menu button for dev menu',
});
type Props = {};
export default class App extends Component<Props> {
getData = async () => {
try {
const value = AsyncStorage.getItem('@storage_Key')
if(value !== null) {
// value previously stored
this.setState({
datasource: JSON.parse(value)
})
}else{
fetch('https://jsonplaceholder.typicode.com/photos', {
method: 'GET'
})
.then((response) => response.json())
.then((responseJson) => {
console.log(responseJson);
this.setState({
datasource: responseJson
})
try {
AsyncStorage.setItem('@storage_Key',JSON.stringify(responseJson))
} catch (e) {
// saving error
}
})
.catch((error) => {
console.error(error);
});
}
} catch(e) {
// error reading value
}
}
constructor(props){
super(props);
this.state={
datasource:'hello world'
};
}
componentDidMount = () => {
this.getData.bind(this);
}
render() {
return (
<View style = {{
flex: 1,
justifyContent: 'center',
alignItems: 'center'
}}>
<FlatList
data = {this.state.datasource}
renderItem={({item}) =>
<View>
<View style = {{
flex: 1,
flexDirection : 'row'
}}>
<Image
style={{width: 50, height: 50}}
source={{uri: item.thumbnailUrl}}
/>
<View>
<Text> albumId > {item.albumId} </Text>
<Text> id > {item.id} </Text>
<Text> title > {item.title} </Text>
</View>
</View>
<View
style={{
borderBottomColor: 'orange',
borderBottomWidth: 5,
}}
/>
</View>
}
/>
</View>
)
}
}
Ниже вывод: Спасибо!
РЕДАКТИРОВАТЬ 1:
getData = async () => {
try {
const value = await AsyncStorage.getItem('@storage_Key')
if(value !== null) {
// value previously stored
this.setState({
datasource: JSON.parse(value)
})
}else{
fetch('https://jsonplaceholder.typicode.com/photos', {
method: 'GET'
})
.then((response) => response.json())
.then((responseJson) => {
console.log(responseJson);
this.setState({
datasource: responseJson
})
try {
await AsyncStorage.setItem('@storage_Key',JSON.stringify(responseJson))
} catch (e) {
// saving error
}
})
.catch((error) => {
console.error(error);
});
}
} catch(e) {
// error reading value
}
}
Получение ошибки после обновления до асинхронного: