Integrando o Firebase no React

Integrando o Firebase no React

Todo desenvolvedor que quer enriquecer o seu portfólio já fez o questionamento em algum momento da vida sobre onde fazer o deploy do back-end da sua aplicação sem muita dor de cabeça. Geralmente, existem repositórios que oferecem serviços pagos ou limitados e com uma burocracia que demanda um tempo considerável para que você aprenda a utilizar, de forma que dá um trabalhão para arrumar tudo isso, maior do que, até mesmo, o que você teve em seu código/aplicação. Visando esta problemática, trago para vocês a solução de todos os nossos problemas: o Firebase!

Hoje, aprenderemos como integrar o Firebase ao React, construindo uma aplicação com consultas suficientemente úteis para que você nunca mais esqueça como utilizar este conjunto de serviços.

Mas afinal: o que é o Firebase?

O Firebase é uma aplicação que disponibiliza diversos serviços computacionais em nuvem para o back-end, fornecidos pelo Google. Nela, é possível integrar diversas linguagens de programação e aplicativos (Node.js, Unity, PHP, Javascript, C++, etc.) para serviços de hospedagem de banco de dados, autenticação e muito mais!

O que é o React?

O React é uma biblioteca Javascript de código aberto e utilizada por diversas empresas gigantes, como o facebook, a netflix, o Instagram, etc. Focado em criar interfaces para o usuário de maneira muito mais prática do que utilizando o Javascript puro, o React foi ganhando mais e mais espaço por ser de fácil assimilação, compreensão e adaptação.

Primeiros Passos

Chegou a hora de sair um pouco do campo dos conceitos e começar a colocar a mão na massa. Como já foi dito, utilizaremos o Firebase como back-end para uma aplicação React que criaremos. Que tal um site onde é possível cadastrar funcionários de uma determinada empresa? Criaremos então nosso projeto React executando o seguinte comando no terminal:

npx create-react-app employee-register

cd employee-register

npm start

OBS - Foi utilizado o npm como ferramenta de gerenciamento de pacotes, mas sinta-se à vontade para utilizar a que lhe for mais confortável. Além disso, neste exemplo estamos utilizando comandos que são executados de maneira efetiva no terminal do Linux. Para outros sistemas operacionais, consulte a documentação do React.

Se tudo der certo, ao fim da execução dos comandos anteriores, será aberto no browser uma página com o símbolo do React:

Figura 1 - Código de um projeto inicial do React em execução


OBS - Dentre os arquivos que são criados dentro da pasta “src” do nosso projeto, só é necessário manter os arquivos “App.css”, “App.js”, “index.css” e “index.js”, visto que não abordaremos as funcionalidades que envolvem os outros arquivos. Apague-os, remova as conexões que eles possuem nestes arquivos citados e limpe o arquivo “App.js”:

Figura 2 - Removendo arquivos desnecessários para esta aplicação em específico

Criando um banco de dados no Firebase

Agora que temos a estrutura básica já construída no React, chegou a hora de direcionar nossa atenção para o Firebase. Acesse o site da aplicação e faça login com uma conta google de sua preferência. Depois, clique em “Ir para console”. Por fim, clique em “Adicionar projeto” e, agora, seremos direcionados para a página onde iremos configurar nosso primeiro banco de dados.

Nesta fase de criação, basta inserir um nome para seu banco de dados (no nosso caso, utilizaremos “employee-register”), clique em continuar, concorde em utilizar o Google Analytics (não é necessário, mas de graça até injeção na testa, concorda?) e clique em “Criar projeto”. Você será direcionado para a página da Figura 3, ou alguma similar:

Figura 3 - Criação do Banco de dados dentro da plataforma do Firebase

Conectando o Firebase ao React

Uma vez criado o projeto que iremos utilizar na nossa aplicação, podemos estabelecer a conexão entre ele e o React. Na tela da figura 3, clique na opção “Web” ( exibida na tela com o símbolo “< />”, o terceiro botão branco abaixo de “Comece adicionando o Firebase ao seu aplicativo”). Crie um apelido para o app, clique em “Registrar App” e, após isso, será disponibilizado para você um passo a passo para realizar a integração.

A primeira ação é instalar o firebase por meio do comando a seguir:

npm install firebase

Após isso, copie o código disponibilizado na página em questão e cole em um documento com extensão javascript. Por questões de organização, criaremos um repositório chamado “back-end” e, dentro dele, um arquivo chamado “connection.js”. É nele que implementamos este código.

Faremos algumas modificações neste documento, apenas para deixá-lo mais simplificado. Primeiro, exclua as interações que existem com “getAnalytics”. Não utilizaremos esta funcionalidade no nosso projeto. Depois, adicionaremos um “export default app” no fim do código, para que possamos ter acesso a esta conexão em outros documentos. O seu código ficará parecido ao que consta na figura 4, com a diferença de que os valores serão diferentes para cada conta:

Figura 4 - Criando conexão entre o React e o Firebase


Retorne para o Firebase e clique em “Continuar para o Console”. Certifique-se de que você está no projeto “employee-register” e procure a opção “Cloud Firestore”. Aparecerá a opção “Criar banco de dados” da qual você deve clicar. Clique em avançar sem precisar alterar as configurações da página seguinte e, ao selecionar uma região para seu banco de dados (quanto mais perto melhor, então selecione o servidor de São Paulo), finalmente teremos concluído todas as configurações para criar um banco de dados no Firebase!

Criando uma coleção

O banco de dados que criamos no Firebase é não relacional, ou seja, não utiliza um esquema de tabelas, com linhas e colunas. É como se você, ao invés de inserir dados em uma linha de uma tabela com N colunas, você criasse um objeto com N chaves.

Diante do que foi explicado, criaremos uma coleção (o equivalente ao que entendemos por tabela em um banco de dados relacional) que armazenará cada informação do usuário. No painel do Firebase (em “Firestore Database”, que foi onde paramos), clique em “Iniciar Coleção” e dê um nome para ela (no nosso exemplo, usaremos “employee”. O id de cada documento contido nessa coleção pode ser gerado manualmente, mas se você clicar em “código automático", será inserido um valor aleatório de caracteres para preenchê-lo. Para um primeiro documento (usuário) dentro da coleção “employee”, criaremos os campos nome (string), cpf (string), salary (number), e sector (array de strings), conforme a figura 5:

Figura 5 - Criando uma coleção e um primeiro documento


Agora, iremos definir no Firebase que permitiremos consultas e subscrições no nosso banco de dados. Clique em “Regras” e, em “Editar Regras”, altere “false” para “true” (linha 5):

Figura 6 - Habilitando interações com o banco de dados

Da parte do Firebase, está tudo pronto. A partir de agora, todas as manipulações na coleção que criamos serão feitas dinamicamente via código.

Criando consultas para o Firebase

A ideia do nosso projeto é criar um CRUD básico utilizando o Firebase, ou seja, desenvolver a criação, leitura, atualização e remoção de elementos da nossa coleção “employee”. Dito isto, caminharemos juntos por cada uma dessas funcionalidades nos passos seguintes.

Leitura

É necessário criar uma função que irá consultar as informações contidas na nossa coleção. Primeiramente, iremos conectar a nossa aplicação com a coleção “employee”. A função que desempenha este papel é a “collection”, que importamos de “firebase/firestore/lite”. Ela recebe como parâmetros a conexão com o nosso banco de dados (utilizamos a função getFirestore para isso e repassamos a função que criamos no arquivo connection.js como parâmetro) e o nome da coleção.

Figura 7 - Conectando o banco de dados e resgatando a coleção desejada

Uma vez criada a conexão com nossa coleção “employee”, iremos resgatar os dados que estão contidos nela. Para isto, utilizaremos a função “getDocs”, importada também de “firebase/firestore/lite”:

Figura 8 - Resgatando dados da coleção “employee”

Por fim, trataremos estes dados e o armazenaremos em um estado. A sugestão aqui é que você faça um “print” em “docsEmployee” e entenda um pouco o formato de como virão os dados. Você entenderá melhor o que faremos a seguir, em busca de salvar no estado um objeto limpo e apenas com as chaves e valores necessários para a exibição:

Figura 9 - Salvando os documentos localizados na coleção “employee” no estado “data”

Agora é com você! Personalize a exibição destes dados como melhor convir. Deixarei abaixo o código, uma estilização simples em CSS e a exibição, para que sirva de exemplo:

Figura 10 - Código para exibição dos documentos da coleção “employee”

Figura 11 - Estilização do código da Figura 10

Figura 12 - Código da Figura 10 em execução em um Browser

Criação

Para adicionar novos usuários para nossa coleção, iremos utilizar a função “addDoc”, importada também de “firebase/firestore/lite”. Ela recebe como parâmetro a função “collectionEmployee” que já utilizamos no passo anterior, além de um objeto com as chaves e valores a serem adicionados no documento criado para a coleção. Para tal, criamos inputs que armazenam em estados os valores a serem adicionados e, ao clicar em “Adicionar”, estes dados serão enviados ao banco de dados:

Figura 13 - Importação da função “addDoc” e criação de estados

Figura 14 - Código de implementação dos inputs = prt.1

Figura 15 - Código de implementação dos inputs = prt.2

Figura 16 - Função de adição de um documento com o uso de “addDoc”

Figura 17 - Função de adição de um documento em execução

Atualização

Para construir uma funcionalidade que permita a edição de usuários já cadastrados, começaremos criando um botão de edição para cada usuário, que passa dados do elemento em questão como parâmetro ao ser clicado:

Figura 18 - Criação de Botão de edição dentro de cada elemento usuário

Após isto, utilizaremos uma das chaves do elemento para realizar uma busca direcionada à nossa coleção (no nosso caso, será o cpf). A função “query” permite esta ação e passamos como parâmetro dela a nossa conhecida função “collectionEmployee”, além de uma função “where”, que recebe uma condição separada por vírgulas no modelo “campo / condição / elemento”. Depois disso, utilizamos a função getDocs para coletar os dados desta consulta e, para que possamos manipular os dados novamente, encaminhamos cada um deles para os estados que já criamos. Desta forma, os inputs serão preenchidos com os valores do documento que queremos editar:

Figura 19 - Importação das funções “query” e “where” e criação de estado chamado “id”

Figura 20 - Função de Editar Elemento

Ao clicar em editar, todos os dados do documento estarão preenchendo os inputs, mas a função “addEmployee” continuará apenas inserindo novos dados ao invés de selecionar um já criado para a edição. Não é isto que queremos. Note na figura 19 que utilizamos um novo estado, setado por “setId”. A intenção de criar este estado é que, primeiro, utilizaremos o id do usuário que queremos editar mais à frente. Depois, podemos criar uma condição na função “addEmployee” em que, caso o estado “id” esteja preenchido com algum dado, a ação que esta função fará será de edição, não de criação. Ao fim de “addEmployee”, basta setarmos o id com uma string vazia, e tudo permanece do jeito que esperamos para nossa aplicação. Por fim, chamamos a função “getCollection” para atualizar os dados que foram manipulados no banco de dados. Veja:

Figura 21 - Alteração na função “addEmployee” para possibilitar seu uso para a edição

Figura 22 - Configurando Botão da função “addEmployee” para exibir a mensagem “Concluir Edição” caso o id não esteja vazio

Figura 23 - Funcionalidade de atualização de dados em funcionamento

Remoção

Por fim, e não menos importante, concluiremos nossa jornada criando a função de remoção de um elemento. Criaremos um botão “Excluir” assim como o fizemos para o botão “Editar”:

Figura 24 - Criação de botão de excluir

Para a função “removeItem”, assim como na função “editItem”, encontraremos o usuário pelo seu cpf e retornaremos os dados do mesmo em uma variável, de forma que seja possível coletar o Id nesse objeto de retorno. Depois, utilizaremos a função “deleteDoc”, passando como parâmetro a função “doc”, que por sua vez recebe como parâmetros a conexão com o banco de dados, o nome da coleção e o id. Por fim, chamamos a função “getCollection” para atualizar os dados que foram manipulados no banco de dados:

Figura 25 - Função que realiza a exclusão de um elemento

Figura 26 - Função de excluir usuários em execução

Considerações Finais

Isso é tudo pessoal! O Firebase é um repositório incrível que nos auxilia muito no armazenamento de dados e, de agora em diante, é com vocês! Pratiquem o máximo que puderem e nos deem feedbacks sobre o que acharam dele!

Se você achou esse artigo interessante, gostaria de tirar quaisquer dúvidas ou somente está afim de trocar uma ideia sobre esses e mais assuntos, você também pode entrar em contato comigo, seja por meio do e-mail bruno.cabral.silva2018@gmail.com ou pelo meu perfil do Linkedin!

Te espero ansiosamente!

💡
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.