Closed leohmoraes closed 5 years ago
Neste bloco abaixo o await não é necessário porque não há nada mais na sequência após esta tarefa.
async componentDidUpdate(_, prevState) {
const { users } = this.state;
if (prevState.users !== users) {
await AsyncStorage.setItem(KEY_ASYNC_STORAGE, JSON.stringify(users));
}
}
Já o bloco abaixo é necessário esperar a obtenção da informação do estado e na sequência carregar os dados na aplicação
async componentDidMount() {
const users = await AsyncStorage.getItem(KEY_ASYNC_STORAGE);
if (users) {
this.setState({ users: JSON.parse(users) });
}
}
Aula 13 - Salvando no Storage
Vamos salvar os dados do usuário no storage do celular, de forma que podemos consultar os valores diretamente do celular se ficarmos sem internet poderemos pegar esses dados, deletar, sem problema algum.
Primeiro vamos instalar a lib:
Depois rodar os comandos:
para iOS:
e no Android:
AsyncStorage
é semelhante ao LocalStorage do navegador, e ele é assíncrono então temos que usarasync/await
do Javascript.Não tem um tamanho limite para salvar no
AsyncStorage
, na verdade dependendo da capacidade de armazenamento do celular do usuário, enquanto estiver espaço em disco, pode armazenar os dados.Para utilizar é muito simples, basta importar:
Criar uma constante que armazena uma chave, pois o AsyncStorage é um banco de dados em SQLITE3 ou https://rocksdb.org/ no Android que utiliza chave e valor.
E igual na web, utilizamos o ciclo de vida do React:
Sempre que atualizar o estado do array de users, se tiver alteração então altera o valor da chave
KEY_ASYNC_STORAGE
passando o novo array com o dado já atualizado, aqui nesse caso não é imutável, realmente alteramos o valor sem ter que fazer cópia do array, etc, que nem nothis.setState
.E quando fazemos um refresh ou saímos e voltamos para a tela de usuários e do componente é montada, então nós buscamos do
AsyncStorage
os dados da chaveKEY_ASYNC_STORAGE
e preenchemos ela no estado deusers
.Pronto, agora já temos os dados salvos e podemos alterar, remover, ou adicionar mais, porém em outra chave.
Código Fonte: https://github.com/leohmoraes/rocketseat-06/releases/tag/13