Published on

Pro Tip: Simplifying Form Handling with React Hook Form

Authors
  • avatar
    Name
    Wardi Soulaimana
    Twitter

Introduction

Handling forms in React can be cumbersome, especially when dealing with complex validation and state management. React Hook Form is a library that simplifies form handling by using hooks, making your code more readable and maintainable.

Introduction to React Hook Form

React Hook Form provides a way to manage form state and validation with minimal boilerplate. It utilizes hooks like useForm, Controller, and useFieldArray to provide a comprehensive solution for form management.

Getting Started

First, install React Hook Form:

npm install react-hook-form

Then, import and use the useForm hook in your component:

Then, import and use the useForm hook in your component:

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

function MyForm() {
  const { register, handleSubmit, watch, errors } = useForm()
  const onSubmit = (data) => console.log(data)

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input name="example" ref={register} />
      {errors.example && <span>This field is required</span>}

      <input name="exampleRequired" ref={register({ required: true })} />
      {errors.exampleRequired && <span>This field is required</span>}

      <button type="submit">Submit</button>
    </form>
  )
}

In this example, useForm provides register, handleSubmit, watch, and errors for form management. The register function is used to register input fields, and handleSubmit handles form submission.

Handling Validation

React Hook Form simplifies validation by allowing you to define validation rules directly in the register function:

const Form = () => (
  <>
    <input name="example" ref={register({ required: true, maxLength: 10 })} />
    {errors.example && <span>This field is required and must be less than 10 characters</span>}
  </>
)

Integrating with UI Libraries React Hook Form seamlessly integrates with UI libraries like Material-UI and Ant Design. Use the Controller component to wrap custom inputs:

import { Controller } from 'react-hook-form'
import TextField from '@material-ui/core/TextField'

const Form = () => (
  <>
    <Controller
      as={TextField}
      name="example"
      control={control}
      defaultValue=""
      rules={{ required: 'This field is required' }}
    />
    {errors.example && <span>{errors.example.message}</span>}
  </>
)

Conclusion

React Hook Form is a powerful tool that simplifies form handling in React. By leveraging hooks, it reduces boilerplate and makes your code more maintainable. Whether you're building simple or complex forms, React Hook Form provides the functionality you need to manage form state and validation effectively.