jotazetaec

Untitled

Jul 14th, 2025
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { useState } from "react";
  2.  
  3. function RegistroUsuario() {
  4.   // Estados para cada campo
  5.   const [nombre, setNombre] = useState("");
  6.   const [correo, setCorreo] = useState("");
  7.   const [edad, setEdad] = useState("");
  8.   const [contrasena, setContrasena] = useState("");
  9.  
  10.   // Estados para errores
  11.   const [errores, setErrores] = useState({});
  12.   const [mensajeFinal, setMensajeFinal] = useState("");
  13.  
  14.   // Función de validación
  15.   const validarFormulario = () => {
  16.     const nuevosErrores = {};
  17.  
  18.     if (nombre.trim().length < 3) {
  19.       nuevosErrores.nombre = "El nombre debe tener al menos 3 caracteres.";
  20.     }
  21.  
  22.     if (!correo.includes("@") || !correo.endsWith(".com")) {
  23.       nuevosErrores.correo = "El correo debe ser válido y terminar en .com.";
  24.     }
  25.  
  26.     if (isNaN(edad) || edad < 18) {
  27.       nuevosErrores.edad = "Debes ser mayor de edad (18+).";
  28.     }
  29.  
  30.     if (contrasena.length < 6) {
  31.       nuevosErrores.contrasena =
  32.         "La contraseña debe tener al menos 6 caracteres.";
  33.     }
  34.  
  35.     setErrores(nuevosErrores);
  36.  
  37.     // Devuelve true si no hay errores
  38.     return Object.keys(nuevosErrores).length === 0;
  39.   };
  40.  
  41.   const manejarEnvio = (e) => {
  42.     e.preventDefault(); // Evita que se recargue la página
  43.  
  44.     if (validarFormulario()) {
  45.       setMensajeFinal(`¡Registro exitoso! Bienvenido, ${nombre}`);
  46.       setErrores({});
  47.       // Limpiar campos si deseas
  48.       setNombre("");
  49.       setCorreo("");
  50.       setEdad("");
  51.       setContrasena("");
  52.     } else {
  53.       setMensajeFinal("");
  54.     }
  55.   };
  56.  
  57.   return (
  58.     <div style={{ maxWidth: "400px", margin: "0 auto" }}>
  59.       <h2>Registro de Usuario</h2>
  60.       <form onSubmit={manejarEnvio}>
  61.         <div>
  62.           <label>Nombre completo:</label>
  63.           <input
  64.             type="text"
  65.             value={nombre}
  66.             onChange={(e) => setNombre(e.target.value)}
  67.           />
  68.           {errores.nombre && <p style={{ color: "red" }}>{errores.nombre}</p>}
  69.         </div>
  70.  
  71.         <div>
  72.           <label>Correo electrónico:</label>
  73.           <input
  74.             type="email"
  75.             value={correo}
  76.             onChange={(e) => setCorreo(e.target.value)}
  77.           />
  78.           {errores.correo && <p style={{ color: "red" }}>{errores.correo}</p>}
  79.         </div>
  80.  
  81.         <div>
  82.           <label>Edad:</label>
  83.           <input
  84.             type="number"
  85.             value={edad}
  86.             onChange={(e) => setEdad(e.target.value)}
  87.           />
  88.           {errores.edad && <p style={{ color: "red" }}>{errores.edad}</p>}
  89.         </div>
  90.  
  91.         <div>
  92.           <label>Contraseña:</label>
  93.           <input
  94.             type="password"
  95.             value={contrasena}
  96.             onChange={(e) => setContrasena(e.target.value)}
  97.           />
  98.           {errores.contrasena && (
  99.             <p style={{ color: "red" }}>{errores.contrasena}</p>
  100.           )}
  101.         </div>
  102.  
  103.         <button type="submit">Registrarse</button>
  104.       </form>
  105.  
  106.       {mensajeFinal && (
  107.         <p style={{ color: "green", fontWeight: "bold" }}>{mensajeFinal}</p>
  108.       )}
  109.     </div>
  110.   );
  111. }
  112.  
  113. export default RegistroUsuario;
  114.  
Advertisement
Add Comment
Please, Sign In to add comment