Crear un formulario de registro utilizando Formik ...
Creado el: 25 de febrero de 2025
Creado el: 25 de febrero de 2025
Crear un formulario de registro utilizando Formik y Yup para la validación. El formulario debe incluir campos como nombre, correo electrónico, contraseña y confirmación de contraseña. Usar Tailwind para el diseño y NextUI para los inputs y botones.
A continuación encontrarás un ejemplo de un formulario de registro que utiliza Formik y Yup para la validación, Tailwind CSS para el diseño y NextUI para los componentes de entrada y botones. Además, se incluye un archivo README que explica cómo integrar este formulario en otros proyectos.
jsximport React from 'react'; import { useFormik } from 'formik'; import * as Yup from 'yup'; // Importar componentes de NextUI import { Input, Button } from '@nextui-org/react'; // Esquema de validación con Yup const validationSchema = Yup.object().shape({ name: Yup.string() .required('El nombre es requerido.'), email: Yup.string() .email('El email no es válido.') .required('El email es requerido.'), password: Yup.string() .min(6, 'La contraseña debe tener al menos 6 caracteres.') .required('La contraseña es requerida.'), confirmPassword: Yup.string() .oneOf([Yup.ref('password'), null], 'Las contraseñas no coinciden.') .required('La confirmación de contraseña es requerida.') }); const RegistrationForm = () => { // useFormik es el hook principal de Formik const formik = useFormik({ initialValues: { name: '', email: '', password: '', confirmPassword: '' }, validationSchema, onSubmit: (values) => { // Aquí puedes manejar el envío de datos // Por ejemplo, enviar a tu API o mostrar un mensaje de éxito console.log('Valores del formulario:', values); alert('¡Formulario enviado exitosamente!'); } }); return ( <div className="flex flex-col items-center justify-center min-h-screen bg-gray-100 p-4"> <div className="bg-white shadow-md rounded-md p-6 max-w-md w-full"> <h1 className="text-2xl font-bold text-center mb-6"> Formulario de Registro </h1> <form onSubmit={formik.handleSubmit} className="flex flex-col gap-4"> {/* Campo Nombre */} <div> <Input bordered labelPlaceholder="Nombre" clearable fullWidth name="name" value={formik.values.name} onChange={formik.handleChange} onBlur={formik.handleBlur} status={ formik.touched.name && formik.errors.name ? 'error' : 'default' } /> {formik.touched.name && formik.errors.name && ( <p className="text-red-500 text-xs mt-1"> {formik.errors.name} </p> )} </div> {/* Campo Email */} <div> <Input bordered labelPlaceholder="Correo electrónico" clearable fullWidth name="email" type="email" value={formik.values.email} onChange={formik.handleChange} onBlur={formik.handleBlur} status={ formik.touched.email && formik.errors.email ? 'error' : 'default' } /> {formik.touched.email && formik.errors.email && ( <p className="text-red-500 text-xs mt-1"> {formik.errors.email} </p> )} </div> {/* Campo Contraseña */} <div> <Input bordered labelPlaceholder="Contraseña" clearable fullWidth name="password" type="password" value={formik.values.password} onChange={formik.handleChange} onBlur={formik.handleBlur} status={ formik.touched.password && formik.errors.password ? 'error' : 'default' } /> {formik.touched.password && formik.errors.password && ( <p className="text-red-500 text-xs mt-1"> {formik.errors.password} </p> )} </div> {/* Campo Confirmar Contraseña */} <div> <Input bordered labelPlaceholder="Confirmar Contraseña" clearable fullWidth name="confirmPassword" type="password" value={formik.values.confirmPassword} onChange={formik.handleChange} onBlur={formik.handleBlur} status={ formik.touched.confirmPassword && formik.errors.confirmPassword ? 'error' : 'default' } /> {formik.touched.confirmPassword && formik.errors.confirmPassword && ( <p className="text-red-500 text-xs mt-1"> {formik.errors.confirmPassword} </p> )} </div> {/* Botón de envío */} <Button type="submit" shadow color="primary" auto > Registrarse </Button> </form> </div> </div> ); }; export default RegistrationForm;
bg-gray-100
, bg-white
, flex
, shadow-md
, rounded-md
, etc.) son clases nativas de Tailwind.tailwind.config.js
tenga configurada la ruta donde se aloja este componente para que Tailwind procese las clases.Input
y Button
) importados desde @nextui-org/react
.@nextui-org/react
).Este es un ejemplo de formulario de registro con validación, creado con Formik y Yup. El formulario utiliza componentes de NextUI para los campos de entrada y botones, mientras que el estilo de la interfaz corre a cargo de Tailwind CSS.
npm install formik
npm install yup
npm install @nextui-org/react
RegistrationForm.jsx
(o .tsx
si usas TypeScript) en tu proyecto.(Si usas Yarn:bashnpm install formik yup @nextui-org/react
yarn add formik yup @nextui-org/react
)tailwind.config.js
, asegúrate de incluir las rutas de tus componentes, por ejemplo:
jsmodule.exports = { content: [ './src/**/*.{js,jsx,ts,tsx}', './components/**/*.{js,jsx,ts,tsx}', // otros archivos o directorios que usen tailwind... ], theme: { extend: {}, }, plugins: [], };
jsximport React from 'react'; import RegistrationForm from './components/RegistrationForm'; function App() { return ( <div> <RegistrationForm /> </div> ); } export default App;
validationSchema
si necesitas más campos o reglas distintas.onSubmit
, reemplaza la lógica de console.log
o el alert
por el flujo que necesites (llamada a una API, actualización de estado global, etc.).Este código es de uso libre. Puedes adaptarlo y utilizarlo en tus proyectos personales o profesionales sin restricciones. Se agradecen menciones o referencias al autor original, pero no son obligatorias.
Con esto ya deberías poder integrar este formulario de registro en tu proyecto, personalizarlo y extenderlo según tus necesidades. ¡Éxito en tu desarrollo!