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çãozodaoreact-hook-form. OzodResolverpermite 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
useCustomFormrecebe 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 ouseForme 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
handleSubmitdouseFormé usada para criar uma função personalizada de envio do formulário. Oform.handleSubmitrecebe a função que será executada quando o formulário for enviado com sucesso. No caso, ele chama a funçãoonSubmite passa osvalues(dados do formulário) para ela.
- Retorno do Hook Personalizado 🔄
return {
form,
handleSubmit,
isSubmitting: form.formState.isSubmitting,
};
};- O hook
useCustomFormretorna 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 (truequando o formulário está em submissão,falsequando 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;