16 - 馃П Formularios y validaciones con React Hook Form
Aprende a manejar formularios en Next.js de manera eficiente y con validaciones usando React Hook Form.
馃攳 ¿Qu茅 es React Hook Form?
React Hook Form (RHF) es una librer铆a para manejar formularios en React/Next.js que ofrece:
- Registro de campos mediante hooks (
register). - Validaciones simples o complejas.
- Optimizaci贸n del rendimiento al evitar renders innecesarios.
- Manejo f谩cil de errores y estados del formulario.
馃挕 Ideal para formularios de login, registro, encuestas, o cualquier formulario interactivo.
Instalaci贸n:
npm install react-hook-form
馃摑 Formulario b谩sico con React Hook Form
Vamos a crear un formulario de contacto con validaciones b谩sicas:
// app/contact/page.js
"use client";
import { useForm } from "react-hook-form";
export default function ContactForm() {
const { register, handleSubmit, formState: { errors } } = useForm();
const onSubmit = (data) => {
alert(JSON.stringify(data, null, 2));
};
return (
<form onSubmit={handleSubmit(onSubmit)} className="max-w-md mx-auto p-4 space-y-4 border rounded shadow">
<div>
<label className="block font-bold">Nombre</label>
<input
className="w-full border p-2 rounded"
{...register("nombre", { required: "El nombre es obligatorio" })}
/>
{errors.nombre && <p className="text-red-500 mt-1">{errors.nombre.message}</p>}
</div>
<div>
<label className="block font-bold">Email</label>
<input
type="email"
className="w-full border p-2 rounded"
{...register("email", {
required: "El email es obligatorio",
pattern: {
value: /^[^@ ]+@[^@ ]+\.[^@ .]{2,}$/,
message: "Email inv谩lido"
}
})}
/>
{errors.email && <p className="text-red-500 mt-1">{errors.email.message}</p>}
</div>
<div>
<label className="block font-bold">Mensaje</label>
<textarea
className="w-full border p-2 rounded"
{...register("mensaje", { required: "El mensaje es obligatorio" })}
/>
{errors.mensaje && <p className="text-red-500 mt-1">{errors.mensaje.message}</p>}
</div>
<button type="submit" className="bg-blue-500 text-white px-4 py-2 rounded">Enviar</button>
</form>
);
}
馃З Resultado visual:
Nombre: campo obligatorio
Email: formato v谩lido requerido
Mensaje: campo obligatorio
✅ Validaciones avanzadas
Puedes usar funciones personalizadas o librer铆as externas como yup para validar formularios complejos.
import { useForm } from "react-hook-form";
import * as yup from "yup";
import { yupResolver } from "@hookform/resolvers/yup";
const schema = yup.object({
nombre: yup.string().required("El nombre es obligatorio"),
email: yup.string().email("Email inv谩lido").required("El email es obligatorio"),
edad: yup.number().min(18, "Debes ser mayor de 18").required("La edad es obligatoria")
}).required();
export default function FormularioAvanzado() {
const { register, handleSubmit, formState: { errors } } = useForm({
resolver: yupResolver(schema)
});
const onSubmit = (data) => console.log(data);
return (
<form onSubmit={handleSubmit(onSubmit)} className="space-y-4">
<input {...register("nombre")} placeholder="Nombre" />
{errors.nombre && <p>{errors.nombre.message}</p>}
<input {...register("email")} placeholder="Email" />
{errors.email && <p>{errors.email.message}</p>}
<input {...register("edad")} placeholder="Edad" type="number" />
{errors.edad && <p>{errors.edad.message}</p>}
<button type="submit">Enviar</button>
</form>
);
}
✅ Resumen
- 馃摑 React Hook Form permite manejar formularios con hooks y validaciones de manera eficiente.
- ⚡ Minimiza renders innecesarios y mejora el rendimiento.
- 馃攳 Integrable con librer铆as de validaci贸n externas como
yupozod. - 馃挕 Facilita mostrar errores y estados de los formularios de forma sencilla y clara.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias