Aqui está App.js
, todo o resto é tão padrão / simples quanto posso conseguir.
import React from 'react';
import { AsyncStorage, Text, View } from 'react-native';
export default class App extends React.Component {
render() {
console.log("Fetching data")
AsyncStorage.getItem('@MySuperStore:key', (value) => {
console.log("Fetched data: ", value)
if(value == null) {
console.log("Writing data!")
AsyncStorage.setItem('@MySuperStore:key', 'data', () => {
console.log("Wrote data!")
})
}
})
return(
<View>
<Text>Hello, ReplIt</Text>
</View>
);
}
}
O buscado value
é sempre null
.
Tentei fazer isso tanto localmente quanto no ReplIt. Em todos os casos, os dados não persistem durante os carregamentos do aplicativo; Eu sempre vejo:
Fetching data
Fetched data: null
Writing data!
Wrote data!
O que estou fazendo de errado? Eu tenho uma suposição incorreta sobre como o Expo interage com o armazenamento persistente? AFAIK, AsyncStorage
deve salvar coisas no dispositivo; para que eu possa fechar e reabrir o aplicativo e fazer com que os dados persistam.
UPD: acabei de perceber que seu código funcionou conforme o esperado ... provavelmente é um problema de substituição, conforme mencionado no comentário.
Evite quaisquer solicitações e chamadas assíncronas no render
método, porque ele pode ser chamado várias vezes, dependendo de como os adereços ou o estado mudam. É melhor colocar todo o código relacionado, componentDidMount
conforme recomendado na documentação . Ele será chamado apenas uma vez quando o componente for montado.
Não sei por que seu código não funcionou para você, retornos de chamada são permitidos AsyncStorage
, no entanto, esperar funciona bem para mim:
import React from "react";
import { AsyncStorage, Text, View } from "react-native";
export default class App extends React.Component {
constructor() {
super();
this.state = {
storedValue: null
};
}
async componentDidMount() {
let storedValue = await AsyncStorage.getItem("@MySuperStore:key");
console.log("Fetched data: ", storedValue);
if (storedValue == null) {
console.log("Writing data!");
storedValue = await AsyncStorage.setItem("@MySuperStore:key", "data");
}
this.setState({
storedValue
});
}
render() {
const { storedValue } = this.state;
return (
<View>
<Text>Hello, ReplIt</Text>
<Text>This is Stored Value, '{storedValue}'</Text>
</View>
);
}
}
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras