Formulário dinâmico com React Hook Form e Zod
Assistir agora
1. Apresentando o projeto
Sobre o Tutorial
Esse tutorial mostra o passo-a-passo para resolver o Mini Projeto Formulário dinâmico com React Hook Form e Zod.
Descrição do projeto
Fazer um formulário na vida real nem sempre é uma tarefa trivial. Nuances como validação, mensagens de erro e máscaras de preenchimento tornam o processo um pouco menos intuitivo. Neste Mini Projeto, você vai aprender a criar um formulário de cadastro dinâmico usando React Hook Form e Zod para facilitar o desenvolvimento.
React Hook Form e Zod são, respectivamente, as principais ferramentas da indústria para gerenciamento de formulários no React e validação client e server side.
O formulário de cadastro terá como funcionalidades:
- Validação e erros diretamente no cliente
- Validação e erros provenientes do servidor
- Botão para esconder/revelar senha
- Preenchimento automático de endereço e cidade de acordo com o CEP
- Máscara para telefone celular, CPF e CEP
Tudo isso usando React, React Hook Forms e Zod.
🤓 Antes de começar
O design e a UI do front-end já estão implementados em um projeto Vite! O objetivo aqui é conseguir fazer as funcionalidades do formulário, bem como aprender as bibliotecas React Hook Form e Zod.
Para isso, basta fazer um fork, clonar o código para a sua máquina, instalar as dependências e rodar pnpm run dev
ou npm run dev
!
A API
O seu formulário deverá ser submetido para uma API desenvolvida por nós. O endpoint está em https://apis.codante.io/api/register-user/register
. Esta API irá retornar um código 200
se todos os dados estiverem corretos; ou um 422
caso haja algum erro de validação. Você deverá implementar em seu código também as mensagens de validação retornadas pelo servidor.
A documentação da API está em https://apis-docs.codante.io/register-user. Será necessário consultá-la para fazer este Mini Projeto.
🔨 Requisitos
Botão para esconder / revelar senha
- Crie um botão que, ao clicar, revele ou esconda as senhas diretamente no formulário.
- Este botão deverá ser um ícone que represente que a senha está escondida ou revelada (no código já há uma sugestão de ícone).
- O botão deve possuir, no mínimo, a acessibilidade de ser ativado via teclado (deve ser possível navegar até ele usando a tecla
tab
).
Máscara de telefone, CPF e CEP
- Implemente, do zero ou usando uma biblioteca, uma máscara para os inputs de
telefone
,cpf
ecep
. - Uma sugestão para as máscaras é, respectivamente,
(00) 00000-0000
,000.000.000-27
e00000-000
.
Preenchimento automático de Endereço (rua) e Cidade após preenchido o CEP
- Após preenchido o CEP, busque em alguma API de CEP os dados de logradouro e cidade.
- Preencha os inputs de endereço e cidade com os dados retornados.
Informação
Antes de implementar sua solução, pense em qual será o melhor evento para ser escutado neste input.
Uso da Biblioteca React Hook Form e Zod
- Todo o formulário deverá ser "regido" pela biblioteca
React Hook Form
. - A validação deverá ser "regida" pela biblioteca
Zod
. - A validação dos dados deverá ocorrer no front-end de acordo com as regras estipuladas:
name
: obrigatório, máximo de 255 caracteres.email
: obrigatório, deve ser um e-mail válido, máximo de 255 caracteres.password
: obrigatório, mínimo de 8 caracteres, máximo de 255 caracteres.password_confirmation
: obrigatório, mínimo de 8 caracteres, máximo de 255 caracteres.terms
: obrigatório, deve ser um booleano.phone
: obrigatório, máximo de 20 caracteres.cpf
: obrigatório, máximo de 14 caracteres, deve seguir o padrão 000.000.000-00, deve ser um CPF válido.zipcode
: obrigatório, máximo de 9 caracteres, deve seguir o padrão 00000-000.address
: obrigatório, máximo de 255 caracteres.city
: obrigatório, máximo de 255 caracteres.
- Todos os dados devem ser submetidos de uma vez só para o endpoint da API do Codante.
Informação
Zod é uma biblioteca de validação que funciona tanto no node como em browsers. Esse projeto é um SPA, o que significa que iremos usar apenas no browser (client side).
Implementação de validação server-side
Além da validação client-side, a nossa API também implementa uma validação server-side. Um exemplo que pode ser explorado é o caso do campo cpf
: na validação client-side vamos checar apenas o "formato" do CPF, enquanto na validação server-side da API também checamos se o CPF é válido pelo seu dígito verificador.
- Implemente, além da validação client-side, também as mensagens de erro de validação retornadas pela API.
🔨 Desafio extra para quem quer ir além
- Crie uma mensagem de sucesso quando a resposta da API for
200
.
🎨 Design Sugerido
Neste Mini Projeto, não será preciso implementar nenhum design - já fizemos isso por você.
👉🏽 O que você irá praticar:
Formulários com React Hook Form e Zod
- Validação client-side
- Validação server-side
schemas
nozod
- Biblioteca
react-hook-form
Formulários HTML e React
- Formulários HTML
- Formulários interativos controlados
- Eventos em formulários (blur, click)
Pré-requisitos
- React básico/intermediário
Seu Instrutor
Aulas
- Introdução
- 1.
Apresentando o projeto
01:26 - 2.
Por que React Hook Form e Zod?
01:33 - 3.
Requisitos do Projeto
09:14 - 4.
Setup do Projeto
03:59 - Deixando o form dinâmico
- 5.
Botão de revelar senha
05:25 Máscaras de Input CEP, CPF e Telefone
04:07Buscando Endereço e Cidade com o CEP
07:46React Puro: dificuldades em implementar formulários
03:27- React Hook Form
React Hook Form Instalação
03:08Usando o React Hook Form no form
03:59Loading e submetendo dados com RHF
05:20Validação e exibição de erros individuais
15:03Componente de erro do React Hook Form
02:47Controlando inputs com o React Hook Form setValue
04:40Validação customizada: senha e confirmação de senha
04:47Corrigindo erros
01:35Implementando validação da API (backend)
07:10- Zod
Zod no React Hook Form usando resolvers
03:21Criando o Schema no Zod
06:01Validações do Zod no formulário
08:24- Últimos Ajustes
React Hot Toast para um melhor feedback
01:56Limpando o formulário após submissão
00:56- finalização
- 23.
Encerramento
01:18