Form validation is a crucial part of web applications, ensuring that user inputs are accurate and meet specific criteria. In this tutorial, we’ll explore how to implement form validation in a React application using React Hooks and the react-hook-form library.

Prerequisites

Before you start, make sure you have the following:

  1. Node.js and npm installed.
  2. A React application set up. You can create one using create-react-app if needed.

Step 1: Install react-hook-form

First, install the react-hook-form library. Open your terminal and run:

npm install react-hook-form

Step 2: Create a Form Component with Validation

Let’s create a form component that uses react-hook-form for validation. Here’s a basic example:

import React from 'react';
import { useForm } from 'react-hook-form';

const FormExample = () => {
  // Initialize the useForm hook
  const { register, handleSubmit, formState: { errors } } = useForm();

  // Handle form submission
  const onSubmit = (data) => {
    console.log(data);
  };

  return (
    <div>
      <h1>Form Validation Example</h1>
      <form onSubmit={handleSubmit(onSubmit)}>
        <div>
          <label htmlFor="firstName">First Name:</label>
          <input
            id="firstName"
            {...register('firstName', { required: 'First name is required' })}
          />
          {errors.firstName && <p>{errors.firstName.message}</p>}
        </div>
        
        <div>
          <label htmlFor="email">Email:</label>
          <input
            id="email"
            type="email"
            {...register('email', {
              required: 'Email is required',
              pattern: {
                value: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
                message: 'Invalid email address'
              }
            })}
          />
          {errors.email && <p>{errors.email.message}</p>}
        </div>
        
        <div>
          <label htmlFor="password">Password:</label>
          <input
            id="password"
            type="password"
            {...register('password', {
              required: 'Password is required',
              minLength: {
                value: 6,
                message: 'Password must be at least 6 characters'
              }
            })}
          />
          {errors.password && <p>{errors.password.message}</p>}
        </div>
        
        <button type="submit">Submit</button>
      </form>
    </div>
  );
};

export default FormExample;

Explanation

  1. Initialize useForm: The useForm hook from react-hook-form manages the form’s state and validation.
  2. Register Inputs: Use the register function to register input fields for validation. You can specify validation rules directly in the register function.
  3. Handle Errors: Access validation errors through formState.errors and display error messages conditionally.
  4. Form Submission: Use handleSubmit to handle form submission and pass the form data to the onSubmit function.

Adding Custom Validation

If you need custom validation, you can use the validate function within register:

<input
  id="customField"
  {...register('customField', {
    validate: value => value.length >= 5 || 'Must be at least 5 characters long'
  })}
/>

Styling the Form

You can enhance the appearance of your form with custom CSS. Here’s a basic example:

form {
  display: flex;
  flex-direction: column;
  max-width: 400px;
  margin: 0 auto;
}

div {
  margin-bottom: 15px;
}

label {
  font-weight: bold;
}

input {
  padding: 8px;
  margin-top: 5px;
  width: 100%;
}

p {
  color: red;
  font-size: 0.875em;
}

Conclusion

In this tutorial, we’ve covered how to master form validation in a React application using React Hooks and react-hook-form. This approach simplifies form management and validation, providing a cleaner and more efficient way to handle user input.

Feel free to customize the form and validation rules according to your needs. Happy coding!

Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *