D Dev Notebook
Code Snippets

Registration Form React

Registration Form

Code Snippets : Registration Form in React

import React, { useState } from 'react';

function RegistrationForm() {
  // Form data state
  const [formData, setFormData] = useState({
    name: '',
    email: '',
    phone: '',
    gender: '',
    dob: '',
    password: ''
  });

  // Error messages state
  const [errors, setErrors] = useState({});

  // Handle input changes
  const handleChange = (e) => {
    const { name, value } = e.target;

    // Update field value in formData
    setFormData(prev => ({
      ...prev,
      [name]: value
    }));
  };

  // Validate form fields before submit
  const validate = () => {
    const newErrors = {};

    if (!formData.name.trim()) {
      newErrors.name = 'Name is required';
    }

    if (!formData.email.trim()) {
      newErrors.email = 'Email is required';
    } else if (!/\S+@\S+\.\S+/.test(formData.email)) {
      newErrors.email = 'Email is invalid';
    }

    if (!formData.phone.trim()) {
      newErrors.phone = 'Phone is required';
    } else if (!/^\d+$/.test(formData.phone)) {
      newErrors.phone = 'Phone must contain only numbers';
    }

    if (!formData.gender) {
      newErrors.gender = 'Please select gender';
    }

    if (!formData.dob) {
      newErrors.dob = 'Date of birth is required';
    }

    if (!formData.password) {
      newErrors.password = 'Password is required';
    } else if (formData.password.length < 6) {
      newErrors.password = 'Password must be at least 6 characters';
    }

    setErrors(newErrors);
    return Object.keys(newErrors).length === 0;
  };

  // Handle form submission
  const handleSubmit = (e) => {
    e.preventDefault();

    if (validate()) {
      alert(`
        Name: ${formData.name}
        Email: ${formData.email}
        Phone: ${formData.phone}
        Gender: ${formData.gender}
        Date of Birth: ${formData.dob}
        Password: ${formData.password}
      `);

      // Optionally reset form here
      // setFormData({ name: '', email: '', phone: '', gender: '', dob: '', password: '' });
      // setErrors({});
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <h2>Registration Form</h2>

      {/* Name field */}
      <label>
        Name:
        <input
          type="text"
          name="name"
          value={formData.name}
          onChange={handleChange}
        />
      </label>
      {errors.name && <p style={{ color: 'red' }}>{errors.name}</p>}
      <br />

      {/* Email field */}
      <label>
        Email:
        <input
          type="email"
          name="email"
          value={formData.email}
          onChange={handleChange}
        />
      </label>
      {errors.email && <p style={{ color: 'red' }}>{errors.email}</p>}
      <br />

      {/* Phone field */}
      <label>
        Phone:
        <input
          type="tel"
          name="phone"
          value={formData.phone}
          onChange={handleChange}
        />
      </label>
      {errors.phone && <p style={{ color: 'red' }}>{errors.phone}</p>}
      <br />

      {/* Gender field */}
      <label>
        Gender:
        <label>
          <input
            type="radio"
            name="gender"
            value="Male"
            checked={formData.gender === 'Male'}
            onChange={handleChange}
          />
          Male
        </label>
        <label>
          <input
            type="radio"
            name="gender"
            value="Female"
            checked={formData.gender === 'Female'}
            onChange={handleChange}
          />
          Female
        </label>
      </label>
      {errors.gender && <p style={{ color: 'red' }}>{errors.gender}</p>}
      <br />

      {/* Date of Birth field */}
      <label>
        Date of Birth:
        <input
          type="date"
          name="dob"
          value={formData.dob}
          onChange={handleChange}
        />
      </label>
      {errors.dob && <p style={{ color: 'red' }}>{errors.dob}</p>}
      <br />

      {/* Password field */}
      <label>
        Password:
        <input
          type="password"
          name="password"
          value={formData.password}
          onChange={handleChange}
        />
      </label>
      {errors.password && <p style={{ color: 'red' }}>{errors.password}</p>}
      <br />

      {/* Submit button */}
      <button type="submit">Register</button>
    </form>
  );
}

export default RegistrationForm;
  • Clean validation messages shown near each field
  • Validation logic separated in validate() function
  • Alert shows full user data only after validation passes

On this page