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.
  • minlength e maxlength define o comprimento mínimo e máximo para um valor de entrada de string.
  • min e max -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 .

Source link