Escolar Documentos
Profissional Documentos
Cultura Documentos
Matéria 5 - Programação para Dispositivos Móveis - Tema 3
Matéria 5 - Programação para Dispositivos Móveis - Tema 3
Descrição
Propósito
Ao final dos estudos, você deverá estar apto a construir aplicativos com
persistência de dados, por meio da plataforma React Native, utilizando
diversas metodologias para armazenamento. Com o conhecimento
adquirido, será possível definir o modelo de armazenagem de dados
para os mais diversos aplicativos, desde sistemas simples, com base
em AsyncStorage, SQLite ou Realm, até a utilização de NoSQL, via
MongoDB.
Preparação
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 1/74
30/09/2023, 13:34 Persistência de dados com React Native
Objetivos
Módulo 1
AsyncStorage
Empregar AsyncStorage para a persistência local de dados.
Módulo 2
Módulo 3
Realm
Módulo 4
Introdução
Neste conteúdo, analisaremos as ferramentas para persistência de
dados mais comuns no ambiente do React Native, a começar pelo
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 2/74
30/09/2023, 13:34 Persistência de dados com React Native
1 - AsyncStorage
Ao final deste módulo, você será capaz de empregar AsyncStorage para a persistência local de
dados.
Serialização e persistência
Sistemas de informação podem ser descritos como ferramentais
tecnológicos capazes de trazer significado para um conjunto de dados,
o que nos leva à necessidade natural de acumular os dados que serão
interpretados. Em se tratando do armazenamento de dados, temos dois
conceitos muito importantes, que são a serialização e a persistência.
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 3/74
30/09/2023, 13:34 Persistência de dados com React Native
Serialização
Definição É um modo de expressar os dados de forma contígua,
podendo ser uma sequência de bytes ou algum padrão de texto
conhecido, como XML (eXtended Markup Language) ou JSON (Java
Script Object Notation).
Persistência
Definição Uma estrutura dotada de persistência ou persistente é aquela
capaz de guardar seu estado corrente, normalmente em meio não
volátil, como as unidades de disco.
Typescript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 4/74
30/09/2023, 13:34 Persistência de dados com React Native
Typescript
content_copy
Typescript
content_copy
1 const fs = require('fs');
2
3 let prod1 = null;
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 5/74
30/09/2023, 13:34 Persistência de dados com React Native
4 try{
5 let prodStr = fs.readFileSync('prod1.json');
6 prod1 = JSON.parse(prodStr);
7 }catch(err){
8 prod1 = {codigo: 1, nome: 'Teclado', quantidad
9 let prodStr = JSON.stringify(prod1);
10 fs.writeFileSync('prod1.json',prodStr);
11 }
12
Parser
Parser é um analisador sintático que determina a estrutura lógica de
um texto, de acordo com uma sintaxe de linguagem.
Formatos interoperáveis
Computadores transformam dados em informações, mas cada
plataforma lidará com os modelos de interpretação e as estruturas de
armazenagem de forma diferenciada. Por conta disso, não é raro
observar diversos sistemas herméticos trabalhando a mesma
informação de outros, o que significa um grande retrabalho que poderia
ser amenizado.
Comentário
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 6/74
30/09/2023, 13:34 Persistência de dados com React Native
Interoperabilidade
Interoperabilidade é a habilidade que algumas plataformas oferecem
para se comunicar por meios padronizados, viabilizando sistemas
heterogêneos.
Comentário
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 7/74
30/09/2023, 13:34 Persistência de dados com React Native
Atenção!
A serialização para o formato JSON é necessária para a comunicação
com Web Services do tipo RESTful, sendo também adequada para
armazenamento em disco, mas todas as operações de entrada e saída,
tanto na rede quanto em arquivos, exigirão operações assíncronas.
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 8/74
30/09/2023, 13:34 Persistência de dados com React Native
(error, result) =
getltem Chave
void
Chave
setltem (error) => voi
Valor
Chave
mergeltem (error) => voi
Valor
(error, keys[ ])
getAllKeys (Nenhum)
void
(erros[ ], result[ ]
multiGet Chave[ ]
void
async
Na definição de funções chamadoras.
await
Na espera pela execução do método.
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 9/74
30/09/2023, 13:34 Persistência de dados com React Native
Typescript
content_copy
Typescript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 10/74
30/09/2023, 13:34 Persistência de dados com React Native
Typescript
content_copy
1 import AsyncStorage
2 from '@react-native-async-storage/async-st
3 import { Produto } from './Produto';
4
5 const salvarProduto = async (key: string, value:
6 try {
7 const jsonValue = JSON.stringify(value);
8 await AsyncStorage.setItem(key, jsonValue);
9 } catch (e) {}
10 }
11 const removerProduto = async (key: string) => {
12 try {
13 await AsyncStorage.removeItem(key);
14 } catch(e) {}
Comentário
Observe a necessidade da utilização de Promise no retorno de
obterTodos, uma vez que teremos um vetor de produtos fornecido de
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 11/74
30/09/2023, 13:34 Persistência de dados com React Native
forma assíncrona.
video_library
AsyncStorage
O modelo de persistência local, utilizando o componente AsyncStorage
é apresentado no vídeo a seguir.
Typescript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 12/74
30/09/2023, 13:34 Persistência de dados com React Native
Javascript
content_copy
Typescript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 13/74
30/09/2023, 13:34 Persistência de dados com React Native
11 const[nome,setNome] = u
12 const[quantidade,setQua
13 const salvar = () => {
14 prodAux =
Atenção!
O uso do operador then permite que a navegação ocorra apenas quando
a inclusão do produto for efetivada, no retorno método assíncrono.
Typescript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 14/74
30/09/2023, 13:34 Persistência de dados com React Native
Typescript
content_copy
Comentário
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 15/74
30/09/2023, 13:34 Persistência de dados com React Native
Typescript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 16/74
30/09/2023, 13:34 Persistência de dados com React Native
Typescript
content_copy
1 expo start
Atenção!
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 17/74
30/09/2023, 13:34 Persistência de dados com React Native
Questão 1
A JSON
B XML
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 18/74
30/09/2023, 13:34 Persistência de dados com React Native
C YAML
D CSV
E RTF
Questão 2
A Await
B Promise
C Async
D Result
E Then
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 19/74
30/09/2023, 13:34 Persistência de dados com React Native
Modelo relacional
Bases de dados relacionais seguem um modelo estrutural baseado na
álgebra relacional e no cálculo relacional, áreas da matemática voltadas
para a manipulação de conjuntos, apresentando ótimos resultados na
implementação de consultas.
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 20/74
30/09/2023, 13:34 Persistência de dados com React Native
Alunos
Alunos Curso
Cursos
Curso Coordenador
Alunos | x | Cursos
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 21/74
30/09/2023, 13:34 Persistência de dados com React Native
TypeScript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 22/74
30/09/2023, 13:34 Persistência de dados com React Native
Linguagem SQL
Para trabalharmos com bancos de dados relacionais, é necessário
conhecer ao menos comandos básicos da sintaxe SQL, os quais podem
ser divididos em três áreas:
Seleção ou Consulta.
SQL
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 23/74
30/09/2023, 13:34 Persistência de dados com React Native
SQL
content_copy
SQL
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 24/74
30/09/2023, 13:34 Persistência de dados com React Native
Operador Utilização
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 25/74
30/09/2023, 13:34 Persistência de dados com React Native
Operador Utilização
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 26/74
30/09/2023, 13:34 Persistência de dados com React Native
SQLite.
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 27/74
30/09/2023, 13:34 Persistência de dados com React Native
JavaScript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 28/74
30/09/2023, 13:34 Persistência de dados com React Native
Exemplo
Tipo de o
podendo
index, trig
view.
type
Nome do
name
Nome da
sqlite_master tbl name
qual o ob
rootpage
associad
sql
Número d
raiz.
Instrução
a criação
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 29/74
30/09/2023, 13:34 Persistência de dados com React Native
campo de
autoincre
Nome da
que foi an
Nome do
tbl
foi analis
sqlite_stat1 idx
Informaç
stat
retornada
otimizado
consultas
Atenção!
SQL
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 30/74
30/09/2023, 13:34 Persistência de dados com React Native
TypeScript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 31/74
30/09/2023, 13:34 Persistência de dados com React Native
Javascript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 32/74
30/09/2023, 13:34 Persistência de dados com React Native
TypeScript
content_copy
1 import db from './DatabaseInstance';
2 import { Produto } from './Produto';
3
4 const sqlCreate =
5 'CREATE TABLE IF NOT EXISTS PRODUTO('+
6 'CODIGO INTEGER PRIMARY KEY, '+
7 ' NOME VARCHAR(20), QUANTIDADE INTEGER)';
8 const sqlInsert =
9 'INSERT INTO PRODUTO ( CODIGO, NOME, QUAN
10 ' VALUES (?,?,?)';
11 const sqlDelete =
12 'DELETE FROM PRODUTO WHERE CODIGO=?';
13 const sqlSelect =
14 'SELECT * FROM PRODUTO';
sqlCreate
Para a criação da tabela.
sqlSelect
Para a seleção de todos os produtos.
sqlInsert
Para a inserção de um registro.
sqlDelete
Para a remoção do registro.
Comentário
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 33/74
30/09/2023, 13:34 Persistência de dados com React Native
Além dos métodos públicos para consulta, remoção e inserção que irão
complementar as funcionalidades dos demais arquivos, temos na
classe GestorDados o método privado criarBanco, que executará o
comando definido em sqlCreate, gerando a tabela.
remover
adicionar
obterTodos
Atenção
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 34/74
30/09/2023, 13:34 Persistência de dados com React Native
TypeScript
content_copy
Atenção!
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 35/74
30/09/2023, 13:34 Persistência de dados com React Native
video_library
Armazenagem com SQLite
No vídeo a seguir, apresentamos uma classe de persistência, com base
em SQLite, contemplando as operações de inclusão, alteração, exclusão
e consulta aos dados do banco.
Questão 1
A INSERT.
B CREATE.
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 36/74
30/09/2023, 13:34 Persistência de dados com React Native
C DELETE.
D UPDATE.
E SELECT.
Questão 2
A executeSql
B executeInsert
C transaction
D openDatabase
E executeDelete
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 37/74
30/09/2023, 13:34 Persistência de dados com React Native
3 - Realm
Ao final deste módulo, você será capaz de empregar Realm para a persistência no modelo
orientado a objetos.
Exemplo
Comentário
Enquanto apresenta diversas vantagens, um OODBMS também traz
algumas desvantagens, como a inexistência de um modelo universal de
dados e a falta de uma linguagem de consulta padronizada. Essas são
características que estão presentes no modelo relacional, por meio das
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 39/74
30/09/2023, 13:34 Persistência de dados com React Native
Comentário
Ao longo do tempo, surgiram diversas opções de OODBMS, como pode
ser observado no ranking de bancos de dados do mercado (DB-engines)
sugerido na seção Explore +.
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 40/74
30/09/2023, 13:34 Persistência de dados com React Native
Isso faz com que se torne uma plataforma adequada para trabalhar
offline, motivo pelo qual foi adotado em diversas plataformas móveis, o
que não impede seu uso em sistemas desktop ou cliente-servidor.
TypeScript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 41/74
30/09/2023, 13:34 Persistência de dados com React Native
8 primaryKey: 'codigo',
9 properties: {
10 codigo: 'int', nome: 'string', qu
11 },
12 },
13 ],
14
JavaScript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 42/74
30/09/2023, 13:34 Persistência de dados com React Native
TypeScript
content_copy
Método Utilização
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 43/74
30/09/2023, 13:34 Persistência de dados com React Native
Método Utilização
TypeScript
content_copy
1 db.write(() => {
2 let obj = db.objectForPrimaryKey<Produto>('Prod
3 obj.nome = 'XPTO';
4 obj.quantidade = 1200;
5 });
6
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 44/74
30/09/2023, 13:34 Persistência de dados com React Native
TypeScript
content_copy
1 const CarroSchema = {
2 name: 'Carro',
3 properties: {
4 marca: 'string', modelo: 'string',
5 milhas: {type: 'int', default: 0},
6 }};
7 const PessoaSchema = {
8 name: 'Pessoa',
9 properties: {
10 nome: 'string', fotografia: 'data?'
11 carros: 'Carro[]', // lista de carros
12 }};
13 var db = new Realm({
14 path: 'EstacionamentoDB.realm',
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 45/74
30/09/2023, 13:34 Persistência de dados com React Native
Comentário
TypeScript
content_copy
1 db.write(() => {
2 let john = db.create('Pessoa', {nome: 'John',
3 john.carros.push({marca: 'Honda', modelo: 'A
4 milhas: 1500});
5 john.carros.push({marca: 'Toyota', modelo: 'P
6 milhas: 2780});
7
8 let joan = db.create('Pessoa', {nome: 'Joan',
9 joan.carros.push({marca: 'Skoda', modelo: 'O
10 milhas: 1120});
11 joan.carros.push({marca: 'Ford', modelo: 'F
12 milhas: 95});
13 joan.carros.push({marca: 'VW', modelo: 'G
14 milhas: 1270});
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 46/74
30/09/2023, 13:34 Persistência de dados com React Native
TypeScript
content_copy
1 db.beginTransaction();
2 try {
3 db.create('Pessoa', {nome: 'Arthur', carros: [
4 db.create('Pessoa', {nome: 'Rafael', carros: [
5 {marca: 'Toyota', modelo: 'Prius', milhas: 150
6 ]});
7 db.commitTransaction();
8 } catch (e) {
9 db.cancelTransaction();
10 throw e;
11 }
12
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 47/74
30/09/2023, 13:34 Persistência de dados com React Native
TypeScript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 48/74
30/09/2023, 13:34 Persistência de dados com React Native
TypeScript
content_copy
TypeScript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 49/74
30/09/2023, 13:34 Persistência de dados com React Native
13 }
video_library
Armazenagem com Realm
No vídeo a seguir, apresentamos uma classe de persistência, com base
em Realm, contemplando as operações de inclusão, alteração, exclusão
e consulta aos dados do banco.
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 50/74
30/09/2023, 13:34 Persistência de dados com React Native
Questão 1
A OQL
B ODMG
C OIF
D ODL
E OODMBS
Questão 2
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 51/74
30/09/2023, 13:34 Persistência de dados com React Native
A Transaction.
B commitTransaction.
C beginTransaction.
D rollback.
E cancelTransaction.
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 52/74
30/09/2023, 13:34 Persistência de dados com React Native
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 53/74
30/09/2023, 13:34 Persistência de dados com React Native
Atenção!
Atenção!
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 54/74
30/09/2023, 13:34 Persistência de dados com React Native
Família aluno
aluno:matrícula aluno:nome
Exemplo
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 55/74
30/09/2023, 13:34 Persistência de dados com React Native
Exemplo
Dica
Uma lista dos principais bancos de dados NoSQL pode ser conferida no
ranking (DB-ranking) sugerido na seção Explore +.
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 56/74
30/09/2023, 13:34 Persistência de dados com React Native
Download do MongoDB.
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 57/74
30/09/2023, 13:34 Persistência de dados com React Native
TypeScript
content_copy
1 {
2 '_id': 1,
3 'nome': 'Banana',
4 'quantidade': 2000
5 }
6
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 58/74
30/09/2023, 13:34 Persistência de dados com React Native
Operador Utilização
Combinação lógica de
$and
condições com uso de and.
Combinação lógica de
$or
condições com uso de or.
Seleciona os documentos a
$$regex
partir de uma expressão regular.
TypeScript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 59/74
30/09/2023, 13:34 Persistência de dados com React Native
TypeScript
content_copy
1 use loja;
2 db.inventario.insertMany([
3 {item: 'caneta', qtd: 25, cores: ['vermelho','a
4 {item: 'lapis', qtd: 50, cores: ['preto']},
5 {item: 'papel', qtd: 100, cores: ['azul','branc
6 {item: 'pilot', qtd: 75, cores: ['azul','vermel
7 {item: 'post-it', qtd: 45, cores: ['amarelo','v
8 ]);
9
TypeScript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 60/74
30/09/2023, 13:34 Persistência de dados com React Native
1
2 >{'_id':
db.inventario.find({cores: {$all: ['vermelho','azu
ObjectId('60de880ffe30ca11b392f98a'), 'item
3 'qtd': 25, 'cores': ['vermelho', 'azul']}
4 {'_id': ObjectId('60de880ffe30ca11b392f98d'), 'item
5 'qtd': 75, 'cores': ['azul', 'vermelho']}
6
TypeScript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 61/74
30/09/2023, 13:34 Persistência de dados com React Native
TypeScript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 62/74
30/09/2023, 13:34 Persistência de dados com React Native
O módulo exporta suas funções para que possam ser invocadas a partir
de outros arquivos do tipo Java Script ou Type Script.
JavaScript
content_copy
1 #!/usr/bin/env node
2
3 /**
4 * Module dependencies.
5 */
6
7 global.db = require('../dados/GestorDB');
8
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 63/74
30/09/2023, 13:34 Persistência de dados com React Native
TypeScript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 64/74
30/09/2023, 13:34 Persistência de dados com React Native
3
4 router.get('/', async (req, res, next) => {
5 try {
6 const docs = await global.db.findAll();
7 let valores = docs.map((item) => {return
8 {codigo:item._id, nom
9 quantidade:item.quant
10 res.send(valores);
11 } catch (err) {
12 res.send({resultado:'Erro ao Listar', mensage
13 }
Primeira rota
Segunda rota
Última rota
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 65/74
30/09/2023, 13:34 Persistência de dados com React Native
TypeScript
content_copy
1 npm start
TypeScript
content_copy
1 [{'codigo':1,'nome':'Banana','quantidade':2000},
2 {'codigo':2,'nome':'Morango','quantidade':500}]
3
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 66/74
30/09/2023, 13:34 Persistência de dados com React Native
video_library
Express e MongoDB
No vídeo a seguir, abordamos a criação de um servidor minimalista, com
base em Express, para acesso a uma base de dados MongoDB,
contemplando operações de consulta e manipulação dos dados,
segundo uma arquitetura REST.
Recomendação
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 67/74
30/09/2023, 13:34 Persistência de dados com React Native
TypeScript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 68/74
30/09/2023, 13:34 Persistência de dados com React Native
TypeScript
content_copy
TypeScript
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 69/74
30/09/2023, 13:34 Persistência de dados com React Native
4 class GestorDados {
5 public async remover(chave: string){
6 await api.delete('/remove/'+chave);
7 }
8 public async adicionar(produto: Produto){
9 await api.post('/new',produto);
10 }
11 public async obterTodos(): Promise<Array<Prod
12 let resposta = await api.get('/');
13 return resposta.data;
14 }
Com relação ao método obterTodos, ele faz uma chamada do tipo get
para o endereço raiz do servidor, e retorna o campo data da resposta,
que, como vimos na análise de nosso servidor, é um vetor de produtos
no formato JSON.
Comentário
Questão 1
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 70/74
30/09/2023, 13:34 Persistência de dados com React Native
A $in
B $size
C $all
D $nin
E $exists
Questão 2
A MongoClient.
B Transaction.
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 71/74
30/09/2023, 13:34 Persistência de dados com React Native
C Parameter.
D Router.
E HttpSession.
Considerações finais
Analisamos diversas formas de persistência para os aplicativos criados
por meio do React Native, incluindo conteúdo do tipo chave-valor em
arquivos planos, utilização de elementos estruturados em bases de
dados locais, e o acesso a uma base do tipo NoSQL de forma remota.
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 72/74
30/09/2023, 13:34 Persistência de dados com React Native
headset
Podcast
Ouça agora um resumo dos assuntos abordados ao longo dos módulos.
Explore +
Referências
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 73/74
30/09/2023, 13:34 Persistência de dados com React Native
BODUCH, A; DERKS, R. React and React Native. 3th ed. United Kingdom:
Packt Publishing, 2020.
Download material
Relatar problema
https://stecine.azureedge.net/repositorio/00212ti/02700/index.html# 74/74