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 🧑💻
- Importação das dependências 📦
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
useForm
é importado doreact-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çãozod
aoreact-hook-form
. OzodResolver
permite que a validação dos dados do formulário seja feita de maneira automática, conforme a definição do esquemazod
.
- 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)
: Oresolver
é configurado para usar ozodResolver
, que permite a validação do formulário com base no esquemazod
.defaultValues
: Os valores iniciais do formulário, que podem ser passados para ouseForm
e são usados para preencher os campos do formulário.
- Criação do Handler de Envio do Formulário 📨
const handleSubmit = form.handleSubmit((values) => {
onSubmit(values);
});
- A função
handleSubmit
douseForm
é usada para criar uma função personalizada de envio do formulário. Oform.handleSubmit
recebe a função que será executada quando o formulário for enviado com sucesso. No caso, ele chama a funçãoonSubmit
e passa osvalues
(dados do formulário) para ela.
- 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 douseForm
(comoreset
,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á).
- 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;