DEV Community

Cover image for React hook form Validation
Vijay Kumar
Vijay Kumar

Posted on

React hook form Validation

Mastering Form Validation with React Hook Form: Simplifying User Input

When it comes to handling forms in React, many developers have wrestled with complex solutions to manage state and validation. But with React Hook Form, managing forms becomes effortless, and validation can be done with minimal code. This blog will walk you through setting up form validation in React Hook Form, showing how to streamline the process while maintaining a great user experience.

Why Use React Hook Form?

React Hook Form is a popular library because of its minimal re-renders, easy integration, and simplicity. Some of the key benefits include:

Performance: React Hook Form reduces unnecessary re-renders, making your form faster.

Easy Validation: Supports native form validation and custom rules with very little code.

Integration: Works with existing component libraries and is framework-agnostic.

Setting Up React Hook Form

To start, let’s install the necessary dependencies.

npm install react-hook-form

Next, let’s dive into how you can create a simple form using React Hook Form.

Basic Form Setup

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

const SignupForm = () => {
  const {
    register,
    handleSubmit,
    formState: { errors },
  } = useForm();

  const onSubmit = (data) => {
    console.log(data);
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <div>
        <label htmlFor="username">Username</label>
        <input
          id="username"
          {...register("username", { required: "Username is required" })}
        />
        {errors.username && <p>{errors.username.message}</p>}
      </div>

      <div>
        <label htmlFor="email">Email</label>
        <input
          id="email"
          type="email"
          {...register("email", {
            required: "Email is required",
            pattern: {
              value: /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/,
              message: "Invalid email address",
            },
          })}
        />
        {errors.email && <p>{errors.email.message}</p>}
      </div>

      <button type="submit">Sign Up</button>
    </form>
  );
};

export default SignupForm;
Enter fullscreen mode Exit fullscreen mode

Breaking It Down

useForm: The core hook of React Hook Form. It provides methods like register for tracking input fields, handleSubmit for handling form submission, and formState for managing validation errors.

register: This method connects the form fields to the React Hook Form validation system. In this example, we’re registering username and email with validation rules like required and pattern.

errors: Validation errors are stored in formState.errors. If an error occurs (e.g., if a required field is empty), it will show the corresponding message.

Custom Validation Rules

React Hook Form also allows custom validation rules. Let’s say you want to add a password field with a custom rule that checks the password length.

<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>
Enter fullscreen mode Exit fullscreen mode

Here, we’ve added a minLength rule to the password field to ensure it is at least six characters long.

Handling Form Submission

The handleSubmit method takes a callback function (in this case, onSubmit) that will be triggered when the form is valid and submitted. This function can access all the form data, allowing you to manage or send it to your backend as needed.

A Touch of Styling

Here’s how we can apply some basic styling for better UX:

css
Copy code
form {
  max-width: 400px;
  margin: auto;
  padding: 2rem;
  border: 1px solid #ddd;
  border-radius: 8px;
}

input {
  display: block;
  width: 100%;
  margin-bottom: 1rem;
  padding: 0.5rem;
  border: 1px solid #ccc;
  border-radius: 4px;
}

button {
  padding: 0.7rem 1.2rem;
  background-color: #28a745;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

button:hover {
  background-color: #218838;
}

p {
  color: red;
  font-size: 0.9rem;
}

Enter fullscreen mode Exit fullscreen mode

This simple styling gives the form a professional look and improves user experience with clear error messages and visual feedback.

Conclusion

With React Hook Form, you can create powerful, lightweight forms with seamless validation and a great user experience. Its minimal API and great performance make it an excellent choice for React developers looking to handle forms efficiently. Start using React Hook Form in your projects today and simplify your form management!

Top comments (0)