Pular para o conteúdo

Zod + react-hook-form e Formik.

O Zod pode ser integrado com bibliotecas populares de formulários como React Hook Form e Formik para simplificar a validação e melhorar a gestão de estados nos formulários. A integração dessas ferramentas torna a validação declarativa e mais fácil de gerenciar.

Usando Zod com React Hook Form

React Hook Form é uma biblioteca leve e eficiente para lidar com formulários em React. Você pode integrar o Zod para realizar a validação dos dados de entrada com facilidade.

Exemplo 1: Integração com React Hook Form

import { useForm } from 'react-hook-form';
import { z } from 'zod';
import { zodResolver } from '@hookform/resolvers/zod';
const schema = z.object({
email: z.string().email('E-mail inválido.'),
password: z.string().min(6, 'A senha deve ter pelo menos 6 caracteres.'),
});
function LoginForm() {
const {
register,
handleSubmit,
formState: { errors },
} = useForm({
resolver: zodResolver(schema), // Zod como resolvedor de validação
});
const onSubmit = (data) => {
console.log('Dados validados:', data);
};
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input {...register('email')} placeholder="E-mail" />
{errors.email && <p>{errors.email.message}</p>} {/* Exibe mensagem de erro */}
<input {...register('password')} type="password" placeholder="Senha" />
{errors.password && <p>{errors.password.message}</p>} {/* Exibe mensagem de erro */}
<button type="submit">Login</button>
</form>
);
}

Aqui, usamos o zodResolver para conectar o schema do Zod ao React Hook Form. Quando o formulário é enviado, o Zod valida os dados e, se houver erros, eles são exibidos automaticamente nas mensagens de erro.

Usando Zod com Formik

O Formik é outra biblioteca popular para lidar com formulários em React. Ele também pode ser integrado ao Zod para adicionar uma camada de validação robusta.

Exemplo 2: Integração com Formik

import { Formik, Field, Form, ErrorMessage } from 'formik';
import { z } from 'zod';
import { toFormikValidationSchema } from 'zod-formik-adapter';
const schema = z.object({
email: z.string().email('E-mail inválido.'),
password: z.string().min(6, 'A senha deve ter pelo menos 6 caracteres.'),
});
function LoginForm() {
return (
<Formik
initialValues={{ email: '', password: '' }}
validationSchema={toFormikValidationSchema(schema)} // Zod como schema de validação
onSubmit={(values) => {
console.log('Dados validados:', values);
}}
>
<Form>
<Field name="email" placeholder="E-mail" />
<ErrorMessage name="email" component="div" />
<Field name="password" type="password" placeholder="Senha" />
<ErrorMessage name="password" component="div" />
<button type="submit">Login</button>
</Form>
</Formik>
);
}

Neste exemplo, usamos o Formik para gerenciar o estado do formulário e o Zod para validar os dados. A biblioteca zod-formik-adapter facilita a conversão do schema do Zod para o formato esperado pelo Formik.


Conclusão

A integração do Zod com React Hook Form e Formik oferece uma forma poderosa e simples de validar dados de formulários em React. Com validação declarativa, mensagens de erro customizáveis e suporte a dados complexos, o Zod torna o processo de validação de formulários muito mais eficiente e flexível.