Desenvolvedores
src_
hooks_
useCustomForm.js

Explicação 💡

O código define um hook personalizado chamado useCustomForm, que combina o react-hook-form com a biblioteca zod para validação de formulários. Ele facilita a criação de formulários controlados, ao mesmo tempo que lida com a validação de dados usando um esquema definido pelo zod.

Detalhamento do Código 🧑‍💻

  1. Importação das dependências 📦
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
  • useForm é importado do react-hook-form, que facilita a manipulação de formulários no React.
  • zodResolver é importado do pacote @hookform/resolvers/zod, que conecta o esquema de validação zod ao react-hook-form. O zodResolver permite que a validação dos dados do formulário seja feita de maneira automática, conforme a definição do esquema zod.
  1. Definição do Hook useCustomForm 🪝
const useCustomForm = (schema, defaultValues, onSubmit) => {
  const form = useForm({
    resolver: zodResolver(schema),
    defaultValues,
  });
  • O hook useCustomForm recebe três parâmetros:
    • schema: O esquema de validação, que define como os dados do formulário devem ser validados.
    • defaultValues: Os valores iniciais do formulário.
    • onSubmit: A função a ser chamada quando o formulário for enviado com sucesso.

Dentro do hook, o useForm é invocado com a seguinte configuração:

  • resolver: zodResolver(schema): O resolver é configurado para usar o zodResolver, que permite a validação do formulário com base no esquema zod.
  • defaultValues: Os valores iniciais do formulário, que podem ser passados para o useForm e são usados para preencher os campos do formulário.
  1. Criação do Handler de Envio do Formulário 📨
  const handleSubmit = form.handleSubmit((values) => {
    onSubmit(values);
  });
  • A função handleSubmit do useForm é usada para criar uma função personalizada de envio do formulário. O form.handleSubmit recebe a função que será executada quando o formulário for enviado com sucesso. No caso, ele chama a função onSubmit e passa os values (dados do formulário) para ela.
  1. Retorno do Hook Personalizado 🔄
  return {
    form,
    handleSubmit,
    isSubmitting: form.formState.isSubmitting,
  };
};
  • O hook useCustomForm retorna um objeto contendo:
    • form: O objeto do formulário, que contém todos os métodos e propriedades do useForm (como reset, setValue, etc.).
    • handleSubmit: A função para enviar o formulário.
    • isSubmitting: Um estado booleano que indica se o formulário está sendo enviado (true quando o formulário está em submissão, false quando não está).
  1. Exportação do Hook 🔧
export default useCustomForm;
  • O hook é exportado como o default para ser utilizado em outros componentes.

Código Completo 👨‍💻

import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
 
const useCustomForm = (schema, defaultValues, onSubmit) => {
  const form = useForm({
    resolver: zodResolver(schema),
    defaultValues,
  });
 
  const handleSubmit = form.handleSubmit((values) => {
    onSubmit(values);
  });
 
  return {
    form,
    handleSubmit,
    isSubmitting: form.formState.isSubmitting,
  };
};
 
export default useCustomForm;