Mobile

10 dez, 2021

Tutorial CRUD em app Android e iOS com React Native (parte 2)

Publicidade

E chegamos à segunda parte da nossa série onde vou lhe ensinar como construir um app Android e iOS que faz um CRUD completo (cadastro, listagem, edição e exclusão de dados) usando React Native.

Na primeira parte, criamos o projeto, estruturamos a navegação em abas e criamos apenas a aparência do formulário de cadastro. Nosso app de lista de compras do supermercado está apenas começando a ser construído!

Atenção: esta é uma série intermediária. Caso nunca tenha feito um app em React Native antes, sugiro começar por esta outra série.

#4 – Estados do formulário

Agora vamos programar os estados dos campos, para que seus valores sejam armazenados em memória quando o usuário digitar neles.

Primeiro, vamos precisar importar a função useState do React , isso no AppForm.js.

Depois, vamos criar nossos objetos de estado e as funções de manipulação do estado, dentro da function AppForm e antes do seu retorno.

Note que também deixei preparada uma function para manipular o ‘press’ do botão, que por enquanto apenas imprime no console um objeto JSON com os dados obtidos e um ID baseado no número de milissegundos desde 01/01/1970. Este é um jeito bem bobo de gerar ids únicos mas que vai funcionar para um banco local sem concorrência, como é o caso deste app.

Essa função também joga o usuário de volta para a aba de listagem, o que será muito útil mais tarde. Note que ele faz isso usando um objeto navigation, que estou recebendo por parâmetro na function default.

Agora, vamos referenciar esta funções de manipulação de estado nas propriedades onChangeText dos inputs e onPress do botão, como abaixo.

Agora, ao atualizar a nossa aplicação React Native, preencher os campos do formulário e clicar no botão de Salvar, o console deve exibir o objeto JSON dos campos mapeados e nos jogar de volta para a aba de listagem.

Uma dica é testar tanto no smartphone quanto no simulador/emulador.

Isso mostra que tudo que fizemos até o momento está funcionando.

#5 – Salvando no banco de dados

Agora que temos todo o formulário pronto e funcionando, falta só pegarmos os dados capturados pelos estados e salvar no banco de dados local do dispositivo.

Como estamos usando o Expo, usaremos uma lib chamada Expo Async Storage para este finalidade. Nós instalaremos esta lib usando o comando abaixo, na pasta do seu projeto.

Este AsyncStorage é uma forma bem simples para armazenar dados locais baseado em chave-valor, onde o valor é sempre textual. Sendo sempre textual, o mais comum é a gente salvar objetos JSON em forma de texto, o que chamamos geralmente de objeto “serializado”.

Para usá-lo, vamos alterar os nossos imports do AppForm.js.

E agora, na nossa função handleButtonPress que hoje só imprime o objeto no console, vamos usá-la para salvar os dados obtidos no nosso banco de dados.

Note que para conseguir salvar, primeiro retornamos o valor do elemento ‘items’ que podemos entender como se fosse um array de elementos JSON em forma de texto, tipo um primo pobre do MongoDB. Esse retorno deve ser convertido para JSON (savedItems).

Em seguida, adicionamos o novo item neste mesmo array e enviamos ele de volta, em forma de texto, para o AsyncStorage poder finalizar o trabalho. Note também que tive de colocar um async antes da function, para que o await funcione, pois as chamadas do AsyncStorage são assíncronas.

Agora você pode testar, cadastrando uma série de itens, mas somente vai ver alguma coisa acontecendo no console, pois a tela de listagem ainda não funciona, o que faremos na sequência.

E com isso, finalizamos a letra C do nosso CRUD, o Create!

#6 – Criando a listagem

Uma vez que já temos o cadastro de itens da nossa lista de compras funcionando, podemos construir a outra tela, de listagem. Criar ela será um pouco mais complexo que a de formulário, pois ela é uma listagem de itens e, quando temos uma listagem de itens, temos de criar um componente para o item primeiro.

Vamos chamá-lo de AppItem.js, com o conteúdo que mostrarei a seguir.

Os imports são auto-explicativos, mas a function default requer atenção. Primeiro, ela irá receber um objeto props que conterá o texto do item a ser adicionado na listagem. Além do texto, temos dois botões, um de editar o item e outro de excluir.

Eu tive de adicionar uma view entre esses dois botões para poder estilizá-los de maneira diferente do restante do item, como verá a seguir, principalmente se tratando do flexDirection.

Abaixo, o estilo deste mesmo componente AppItem.js.

Eu estilizei individualmente o container geral, o container dos botões, o botão de edição, o botão de exclusão, um estilo geral para o texto dos mesmos e mais um estilo para o texto do item em si.

Opcionalmente você pode dar uma olhada em pacotes de ícones na Internet para os botões usarem ícones ao invés de texto. Como não quero me alongar muito em frontend, que é algo bem custoso, vamos com texto mesmo.

Agora que temos o nosso item da lista, vamos construir a lista em si, representada no módulo AppList.js.

Primeiro, vamos revisar os imports deste arquivo, adicionando alguns itens novos que usaremos a seguir.

Segundo, vamos adicionar na função default desta tela um estado para o array de itens que, em um primeiro momento, estarão estáticos, mas que futuramente virão do banco de dados.

Com esse estado pronto, vamos mudar a interface desta tela para que tenha uma ScrollView (área com rolagem) e dentro dela, vamos executar um código JavaScript que vai adicionar itens dinamicamente conforme o conteúdo de um array que definimos um pouco antes do return com conteúdos estáticos, apenas para podermos visualizar antes de tornar esta página realmente dinâmica.

Aqui, vale uma menção ao ScrollView que além da propriedade style, que é geral, tem a contentContainerStyle, referente ao conteúdo no seu interior.

Note também como usei o nosso componente AppItem, passando propriedades pra ele, oriundos dos itens do array armazenado no estado que criamos antes. A propriedade key é obrigatória e usaremos ela mais tarde, na listagem e exclusão.

Você vai precisar de alguns estilos novos também, que pode conferir abaixo.

Aqui não tem absolutamente nenhuma novidade em relação ao que já fizemos antes.

Como resultado, você deve ter uma tela de listagem com a seguinte aparência.

Lista pronta

E com isso, encerramos a segunda parte do nosso tutorial.

Na terceira parte, vamos tornar esta listagem dinâmica e partir para as demais letras do CRUD. Confira neste link.

Um abraço e sucesso.