Os formulários são uma parte essencial de como os usuários interagem com sites e aplicativos da web. Validar os dados do usuário passados pelo formulário é uma responsabilidade crucial para um desenvolvedor.
O React-hook-form é uma biblioteca que ajuda você a validar formulários no React. React-hook-form é uma biblioteca mínima sem quaisquer outras dependências. É eficiente e fácil de usar, exigindo que os desenvolvedores escrevam menos linhas de código do que outras bibliotecas de formulários.
Neste guia, você aprenderá como usar a biblioteca de formulários do React Hook para construir formulários excelentes no React sem usar nenhuma estrutura de renderização complicada ou componentes de ordem superior.
Formulário React Hook: Introdução
O React Hook Form tem uma abordagem ligeiramente diferente de outras bibliotecas de formulários no ecossistema React. O React Hook Form adota o uso de entradas não controladas usando ref em vez de depender do estado para controlar as entradas. Essa abordagem torna os formulários mais eficientes e reduz o número de novas renderizações.
O tamanho do pacote é muito pequeno e mínimo: apenas 9,1 KB reduzido + gzip , e tem zero dependências. A API é muito intuitiva e fornece uma experiência perfeita aos desenvolvedores ao trabalhar com formulários. React Hook Form segue os padrões HTML para validar os formulários usando a API de validação baseada em restrições.
Outro ótimo recurso oferecido pelo React Hook Form é sua integração fácil com as bibliotecas de IU, já que a maioria das bibliotecas suporta ref .
Para instalar o React Hook Form, execute o seguinte comando:
npm install react-hook-form
Formulário de registro simples
Nesta seção, você aprenderá sobre os fundamentos do gancho useForm criando um formulário de registro muito básico.
Primeiro, importe o gancho useForm do pacote react-hook-form .
import {useForm} de"react-hook-form";
Então, dentro do seu componente, use o Gancho da seguinte maneira:
const {register, handleSubmit}=useForm ();
O gancho useForm retorna um objeto contendo poucas propriedades. Por enquanto, você só precisa de register e handleSubmit .
O método register ajuda a registrar um campo de entrada no React Hook Form para que fique disponível para validação e seu valor possa ser rastreado para alterações. Para registrar a entrada, passe o método register para ref>/code> prop da entrada.
Um ponto importante a observar aqui é que o componente de entrada deve ter uma propriedade nome e seu valor deve ser único.
O método handleSubmit , como o nome sugere, gerencia o envio do formulário. Ele precisa ser passado como um prop para o prop onSubmit do componente form .
O método handleSubmit pode lidar com duas funções como argumentos. A primeira função passada como um argumento será chamada junto com os valores de campo registrados quando a validação do formulário for bem-sucedida. A segunda função é chamada com erros quando a validação falha.
const onFormSubmit=data=> console.log (dados); const onErrors=erros=> console.error (erros);
Agora que você tem uma boa ideia sobre o uso básico do gancho useForm , dê uma olhada em um exemplo mais real:
import React from"react";
import {useForm} de"react-hook-form";
import {Form, FormGroup, Label, Input, Button} de"reactstrap";
const RegisterForm=()=> { const {registrar, manipularSubmit}=useForm (); const handleRegistration=(dados)=> console.log (dados); Retorna ( );
};
exportar RegisterForm padrão;
Como você pode ver, nenhum outro componente foi importado para rastrear os valores de entrada. O gancho useForm torna o código do componente mais limpo e fácil de manter. E como o formulário não é controlado, você não precisa passar adereços como onChange e value para cada entrada.
No exemplo acima, a biblioteca reactstrap é usada para construir a IU do formulário. Você pode notar aqui que o método register foi passado para o prop innerRef em vez de ref ; isso ocorre porque os componentes do formulário reactstrap fornecem acesso à entrada DOM nativa usando o prop innerRef .
Você pode usar qualquer outra biblioteca de IU de sua escolha para criar o formulário. Certifique-se de verificar o prop para acessar a referência ao componente de entrada nativo.
Na próxima seção, você aprenderá como lidar com a validação do formulário no formulário acima.
Lidando com validação e erros
Para aplicar validações a um campo, você pode passar opções de validação para o método de registro. As opções de validação são semelhantes ao padrão de validação de formulário HTML existente.
As opções de validação incluem as seguintes propriedades.
-
obrigatório-Indica se o campo é obrigatório ou não. Se esta propriedade for definida como verdadeira, o campo não pode estar vazio. -
minlengthemaxlengthdefine o comprimento mínimo e máximo para um valor de entrada de string. -
minemax-Define os valores mínimo e máximo para o valor numérico. -
tipo-Indica o tipo do campo de entrada; pode ser e-mail, número, texto ou qualquer outro tipo de entrada HTML padrão. -
pattern-Define um padrão para o valor de entrada usando uma expressão regular.
Se você deseja marcar um campo como obrigatório, pode escrever algo da seguinte maneira.
Ao enviar, isso resultará no seguinte objeto de erro.
{
nome: { tipo:"obrigatório" mensagem:"" ref: }
}
Aqui, a propriedade type se refere ao tipo da validação com falha e a propriedade ref contém o elemento de entrada DOM nativo.
Você também pode passar uma mensagem de erro para o campo passando uma string em vez de um booleano para a propriedade de validação.
//...
Você também pode acessar o objeto de erro no gancho useForm .
const {register, handleSubmit, errors}=useForm ();
Abaixo você pode encontrar o exemplo completo.
import React from"react";
import {useForm} de"react-hook-form";
import {Form, FormGroup, Label, Input, Button} de"reactstrap";
const RegisterForm=()=> { const {registrar, manipularSubmit, erros}=useForm (); const handleRegistration=(dados)=> console.log (dados); const handleError=(erros)=> {}; const registerOptions={ nome: {obrigatório:"Nome é obrigatório"}, email: {required:"Email is required"}, senha: { obrigatório:"A senha é necessária", minLength: { valor: 8, mensagem:"A senha deve ter pelo menos 8 caracteres" } } }; Retorna ( {errors.name && errors.name.message} {errors.email && errors.email.message} {errors.password && errors.password.message} );
};
exportar RegisterForm padrão;
Se quiser validar o campo quando houver um evento onChange ou onBlur , você pode passar uma propriedade de modo para o useForm Hook.
const {register, handleSubmit, errors}=useForm ({ modo:"onBlur"
});
Você pode encontrar mais detalhes sobre o gancho useForm na referência da API .
Uso com componentes de terceiros
Em alguns casos, o componente de IU externo que você deseja usar no formulário pode não oferecer suporte a ref e só pode ser controlado pelo estado.
O React Hook Form tem disposições para esses casos de uso e pode se integrar facilmente com qualquer componente controlado por terceiros.
O React Hook Form fornece um componente wrapper chamado Controller que permite registrar um componente externo controlado, semelhante ao funcionamento do método register . Neste caso, em vez do método register , você usará o objeto control do gancho useForm .
const {register, handleSubmit, errors, control}=useForm ();
Considere que você deve criar um campo de função em seu formulário que aceitará valores de uma entrada selecionada. Você pode criar a entrada de seleção usando a biblioteca react-select .
O objeto control deve ser passado para o prop control do componente Controller , junto com o nome do campo. Você pode especificar as regras de validação usando a proposta rules prop.
O componente controlado deve ser passado para o componente Controlador usando o prop as . O prop as injetará prop onChange , onBlur e value no componente. O componente Select também requer um prop options para renderizar as opções suspensas. Assim, você pode adicionar o prop options diretamente ao componente Controller e ele será passado para o componente Select , junto com quaisquer outros props adicionais.
Você pode verificar o exemplo completo para o campo de função abaixo.
import {useForm, Controller} de"react-hook-form";
importar Selecione em"react-select";
//...
const {registrar, manipularSubmit, erros, controle}=useForm ({ modo:"onBlur"
}); const selectOptions=[ {valor:"aluno", rótulo:"Aluno"}, {valor:"desenvolvedor", rótulo:"Desenvolvedor"}, {valor:"gerente", rótulo:"Gerente"}
]; const registerOptions={ //... papel: {obrigatório:"O papel é obrigatório"}
}; //... {errors.role && errors.role.message}
Você pode consultar a referência da API para o componente Controller aqui para uma explicação detalhada.
Conclusão
O React Hook Form é uma excelente adição ao ecossistema React Open Source. Isso tornou a criação e manutenção de formulários muito mais fácil para os desenvolvedores. A melhor parte dessa biblioteca é que ela se concentra mais na experiência do desenvolvedor e é muito flexível para trabalhar. O React Hook Form também se integra bem com bibliotecas de gerenciamento de estado e funciona excelente no React Native.
Era isso neste guia. Você pode verificar o código completo e a demonstração para sua referência aqui . Até a próxima vez, fique seguro e continue construindo mais formulários. Atenciosamente,
Referências
Documentação do formulário React Hook
A postagem O guia completo para o Formulário React Hook apareceu primeiro no LogRocket Blog .