You can utilize the built-in HTML5 form validation attributes, such as required, pattern, min, max, type, etc., along with React's controlled form components to manage form data and handle validation.
Code:
import React, { useState } from 'react';
function MyForm() {
  const [formData, setFormData] = useState({
    email: '',
    password: '',
    age: ''
  });
  const handleChange = (e) => {
    const { name, value } = e.target;
    setFormData((prevData) => ({
      ...prevData,
      [name]: value
    }));
  };
  const handleSubmit = (e) => {
    e.preventDefault();
    const form = e.target;
    // HTML5 form validation
    if (form.checkValidity()) {
      console.log('Form submitted successfully');
      // Process form data
    } else {
      console.log('Form validation failed');
      form.reportValidity();
    }
  };
  return (
    <form onSubmit={handleSubmit} noValidate>
      <div>
        <label htmlFor="email">Enter your Email:</label>
        <input
          type="email"
          id="email"
          name="email"
          value={formData.email}
          onChange={handleChange}
          required
        />
      </div>
      <div>
        <label htmlFor="password">Enter correct Password:</label>
        <input
          type="password"
          id="password"
          name="password"
          value={formData.password}
          onChange={handleChange}
          required
          minLength="6"
        />
      </div>
      <div>
        <label htmlFor="age">Enter your Age:</label>
        <input
          type="number"
          id="age"
          name="age"
          value={formData.age}
          onChange={handleChange}
          required
          min="18"
          max="100"
        />
      </div>
      <button type="submit">Done</button>
    </form>
  );
}
export default MyForm;