0% acharam este documento útil (0 voto)
6 visualizações16 páginas

Async Storage

O documento aborda o uso do AsyncStorage em aplicações React Native, destacando sua importância para a persistência de dados em dispositivos móveis. O AsyncStorage permite armazenar, recuperar e gerenciar dados localmente, sendo ideal para informações simples e de pequeno a médio volume. O texto também inclui exemplos práticos de implementação e recomendações sobre quando e como utilizar essa ferramenta.

Enviado por

maluquinholivros
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
6 visualizações16 páginas

Async Storage

O documento aborda o uso do AsyncStorage em aplicações React Native, destacando sua importância para a persistência de dados em dispositivos móveis. O AsyncStorage permite armazenar, recuperar e gerenciar dados localmente, sendo ideal para informações simples e de pequeno a médio volume. O texto também inclui exemplos práticos de implementação e recomendações sobre quando e como utilizar essa ferramenta.

Enviado por

maluquinholivros
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

AsyncStorage em React Native com Expo Snack

Persistência de Dados em Aplicações Mobile


Disciplina: Programação para Dispositivos Móveis
Professor: Professor Renato Rocha
Tecnologia: React Native + Expo Snack

Introdução
Durante o desenvolvimento de aplicações mobile, um dos maiores desafios é manter informações salvas
mesmo após o aplicativo ser fechado.

Imagine os seguintes cenários:

um aplicativo de tarefas;
um aplicativo de anotações;
um sistema de login;
um aplicativo de favoritos;
um carrinho de compras;
um sistema de coleta de dados em campo.

Se o usuário fechar o aplicativo e todas as informações desaparecerem, a aplicação perde grande parte de sua
utilidade.

É exatamente nesse contexto que surge o AsyncStorage.

O que é AsyncStorage?
O AsyncStorage é um sistema de armazenamento local utilizado em aplicações React Native.

Ele permite:

salvar dados no dispositivo;


recuperar informações posteriormente;
manter dados persistidos mesmo após o fechamento do aplicativo.
Definição Técnica
O AsyncStorage funciona como um armazenamento local baseado em pares:

CHAVE → VALOR

Exemplo:

"nome" → "Renato"
"tema" → "escuro"
"usuario" → "{dados JSON}"

Analogia Simples
Imagine o AsyncStorage como uma pequena gaveta dentro do celular.

O aplicativo pode:

guardar informações;
abrir a gaveta depois;
recuperar os dados armazenados.

Mesmo que o aplicativo seja fechado, os dados continuam lá.

Para que serve o AsyncStorage?


O AsyncStorage é utilizado principalmente para:

Persistência local
Salvar dados localmente no dispositivo.

Cache de informações
Guardar dados vindos de APIs para uso offline.
Preferências do usuário
Exemplos:

tema escuro;
idioma;
configurações.

Sessão de login
Guardar:

token;
email;
preferências do usuário.

Aplicações offline
Muito utilizado em:

coleta de dados em campo;


agronegócio;
logística;
pesquisas externas.

Quando usar AsyncStorage?


Use AsyncStorage quando:
Os dados forem simples
Precisar persistir informações localmente
O volume de dados for pequeno ou médio
Desejar funcionamento offline
Precisar armazenar configurações
Quando NÃO usar AsyncStorage?
Evite usar quando:
Existirem muitos dados
Precisar de consultas complexas
Precisar de alta performance
Os dados forem extremamente sensíveis
Necessitar de banco relacional

Como o AsyncStorage funciona?


O AsyncStorage funciona de maneira assíncrona.

Isso significa que:

as operações não travam a interface;


o React Native continua executando normalmente.

Instalação no Expo Snack


No Snack Expo, adicione a dependência:

@react-native-async-storage/async-storage

Ou utilize:

npx expo install @react-native-async-storage/async-storage

Importando o AsyncStorage
import AsyncStorage from '@react-native-async-storage/async-storage';
Principais Métodos
Método Função
setItem() Salvar dados
getItem() Recuperar dados
removeItem() Remover dados
clear() Limpar armazenamento

Estrutura Básica
Salvando
await [Link]('chave', 'valor');

Recuperando
const valor = await [Link]('chave');

Removendo
await [Link]('chave');

Primeiro Exemplo Completo


Objetivo
Salvar o nome digitado pelo usuário e recuperá-lo posteriormente.
Código Completo
import React, { useState } from 'react';

import {
View,
Text,
TextInput,
Button,
StyleSheet
} from 'react-native';

import AsyncStorage from '@react-native-async-storage/async-storage';

export default function App() {

const [nome, setNome] = useState('');


const [nomeSalvo, setNomeSalvo] = useState('');

async function salvarNome() {

try {

await [Link]('@nome', nome);

alert('Nome salvo com sucesso!');

} catch (erro) {

alert('Erro ao salvar');

async function carregarNome() {

try {

const valor = await [Link]('@nome');

if(valor !== null){

setNomeSalvo(valor);

} else {

alert('Nenhum nome encontrado');

} catch (erro) {

alert('Erro ao carregar');

return (

<View style={[Link]}>

<Text style={[Link]}>
AsyncStorage
</Text>
<TextInput
placeholder="Digite seu nome"
value={nome}
onChangeText={setNome}
style={[Link]}
/>

<Button
title="Salvar Nome"
onPress={salvarNome}
/>

<View style={{ marginTop: 10 }} />

<Button
title="Carregar Nome"
onPress={carregarNome}
/>

<Text style={[Link]}>
Nome salvo: {nomeSalvo}
</Text>

</View>

);

const styles = [Link]({

container: {
flex: 1,
justifyContent: 'center',
padding: 20
},

titulo: {
fontSize: 28,
fontWeight: 'bold',
marginBottom: 20,
textAlign: 'center'
},

input: {
borderWidth: 1,
borderColor: '#999',
padding: 10,
marginBottom: 20,
borderRadius: 8
},

resultado: {
marginTop: 20,
fontSize: 18
}

});
Explicação do Código

useState()
const [nome, setNome] = useState('');

Armazena o texto digitado.

salvarNome()
await [Link]('@nome', nome);

Salva:

 chave → @nome
 valor → conteúdo digitado.

carregarNome()
const valor = await [Link]('@nome');

Busca o valor salvo anteriormente.

Por que usamos await?


O AsyncStorage é assíncrono.

Sem await:

o código pode continuar antes da operação terminar;


erros e comportamentos inesperados podem ocorrer.

Trabalhando com Objetos


O AsyncStorage salva apenas strings.

Então objetos precisam ser convertidos.


[Link]()
Converte objeto para texto.

[Link](objeto)

[Link]()
Converte texto novamente para objeto.

[Link](texto)

Exemplo com Objeto


const usuario = {
nome: 'Renato',
idade: 30
};

await [Link](
'@usuario',
[Link](usuario)
);

Recuperando Objeto
const dados = await [Link]('@usuario');

const usuario = [Link](dados);

Exemplo Avançado — Lista de Tarefas


Objetivo
Criar CRUD simples utilizando AsyncStorage.

Conceito CRUD
Operação Significado
Create Criar
Read Ler
Update Atualizar
Delete Excluir
Código Completo
import React, { useState, useEffect } from 'react';

import {
View,
Text,
TextInput,
Button,
FlatList,
StyleSheet
} from 'react-native';

import AsyncStorage from '@react-native-async-storage/async-storage';

export default function App() {

const [tarefa, setTarefa] = useState('');


const [tarefas, setTarefas] = useState([]);

useEffect(() => {

carregarTarefas();

}, []);

async function carregarTarefas() {

try {

const dados = await [Link]('@tarefas');

if(dados !== null){

setTarefas([Link](dados));

} catch (erro) {

alert('Erro ao carregar tarefas');

async function adicionarTarefa() {

if(tarefa === '') return;

const novaLista = [
...tarefas,
{
id: [Link]().toString(),
nome: tarefa
}
];

setTarefas(novaLista);

await [Link](
'@tarefas',
[Link](novaLista)
);

setTarefa('');
}

async function removerTarefa(id) {

const novaLista = [Link](


item => [Link] !== id
);

setTarefas(novaLista);

await [Link](
'@tarefas',
[Link](novaLista)
);

return (

<View style={[Link]}>

<Text style={[Link]}>
Lista de Tarefas
</Text>

<TextInput
placeholder="Digite uma tarefa"
value={tarefa}
onChangeText={setTarefa}
style={[Link]}
/>

<Button
title="Adicionar"
onPress={adicionarTarefa}
/>

<FlatList
data={tarefas}
keyExtractor={(item) => [Link]}
renderItem={({ item }) => (

<View style={[Link]}>

<Text style={[Link]}>
{[Link]}
</Text>

<Button
title="Excluir"
onPress={() => removerTarefa([Link])}
/>

</View>

)}
/>

</View>

);

const styles = [Link]({


container: {
flex: 1,
padding: 20,
marginTop: 50
},

titulo: {
fontSize: 28,
fontWeight: 'bold',
marginBottom: 20
},

input: {
borderWidth: 1,
padding: 10,
borderRadius: 8,
marginBottom: 10
},

item: {
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center',
padding: 10,
borderWidth: 1,
marginTop: 10,
borderRadius: 8
},

texto: {
fontSize: 18
}

});

Conceitos Importantes no Projeto

useEffect()
useEffect(() => {

carregarTarefas();

}, []);

Executa quando o aplicativo inicia.

FlatList
Utilizada para renderizar listas com melhor performance.
Persistência Automática
Sempre que adicionamos ou removemos:

 atualizamos o estado;
 salvamos novamente no AsyncStorage.

Estrutura de Dados
{
id: "123",
nome: "Estudar React Native"
}

Tratamento de Erros
Sempre utilize:

try {

} catch(erro) {

Erros Mais Comuns

Esquecer await
ERRADO:

const dados = [Link]('@dados');

CERTO:

const dados = await [Link]('@dados');


Salvar objeto sem [Link]
ERRADO:

await [Link]('@obj', objeto);

CERTO:

await [Link](
'@obj',
[Link](objeto)
);

Não tratar null


ERRADO:

[Link](null);

Segurança
O AsyncStorage:

NÃO é criptografado;
NÃO deve armazenar dados extremamente sensíveis.

Evite salvar:

senhas;
informações bancárias;
documentos críticos.

AsyncStorage vs Banco de Dados


AsyncStorage Banco de Dados
Simples Complexo
Chave-valor Estruturado
Pequeno volume Grande volume
Fácil uso Consultas avançadas
Offline simples Alto desempenho
Aplicações Reais
O AsyncStorage é muito utilizado em:

aplicativos agrícolas;
sistemas de coleta em campo;
aplicativos educacionais;
aplicativos offline;
apps de produtividade;
sistemas híbridos.

Desafio Proposto
Desenvolver um aplicativo contendo:
Requisitos

cadastro;
listagem;
remoção;
persistência local;
interface organizada.

Desafio Avançado
Adicionar:

edição;
tema escuro;
favoritos;
categorias;
cache offline;
sincronização futura.
Conclusão
O AsyncStorage é uma das ferramentas mais importantes no desenvolvimento mobile com React Native.

Ele permite:

persistência local;
funcionamento offline;
melhor experiência do usuário;
armazenamento simples e eficiente.

Dominar AsyncStorage é fundamental para qualquer desenvolvedor mobile que deseje construir aplicações
modernas, funcionais e profissionais.

Recomendações Finais
Durante o desenvolvimento:

organizem o código;
utilizem nomes padronizados;
tratem erros;
utilizem JSON corretamente;
pratiquem persistência constantemente.

A melhor maneira de aprender React Native é construindo aplicações reais.

Você também pode gostar