VOOZH about

URL: https://blog.logrocket.com/react-hook-form-vs-formik-comparison/

⇱ React Hook Form vs. Formik: A technical and performance comparison - LogRocket Blog


2021-07-10
1538
#react
Siegfried Grimbeek
8577
πŸ‘ Image

See how LogRocket's Galileo AI surfaces the most severe issues for you

No signup required

Check it out

Editor’s Note: This article was updated in July 2021 to reflect current technical statistic comparisons of both React Hook Form and Formik.

πŸ‘ react hook form vs formik

πŸš€ Sign up for The Replay newsletter

The Replay is a weekly newsletter for dev and engineering leaders.

Delivered once a week, it's your curated guide to the most important conversations around frontend dev, emerging AI tools, and the state of modern software.

Introduction

As JavaScript developers, we are all aware of the complexities and intricacies that we may encounter when working with React and forms. We have all struggled with form verbosity, form validations, and managing the state of the form and its components.

It was these struggles that led to the development of Formik. Formik addressed several shortcomings of its β€œpredecessor,” Redux Form. Then, React Hook Form was released, which in turn addressed some of the shortcomings of Formik.

Formik outperformed Redux Form in terms of size, best practices, and performance, but in this article, we will see how Formik measures up against React Hook Form.

Technical comparison of React Hook Form and Formik

Below are the download statistics for React Hook Form and Formik. Formik still leads with well over 1 million weekly downloads:

πŸ‘ A graph comparing downloads of react-hook-form vs formik

But apart from the number of downloads, the above also shows the size, last updates, and the open issues, which are all good metrics on which to judge the libraries.

Based on the minzipped size, React Hook Form comes in at less than half the size of Formik, and it can also be deducted that both libraries are in active development because they get updated regularly. One thing to note is the difference in open issues. Here, React Hook Form outperforms Formik,

Next, let’s compare the codebase and the dependencies:

Formik module composition:

πŸ‘ Formik Dependencies
Formik has nine dependencies.

React Hook Form module composition:

πŸ‘ React Hook Form Dependencies
React Hook Form has no dependencies.

So what does the above mean? The fewer dependencies a library has, the better. Take the infamous β€œleft pad” disaster as an example. The left pad disaster occurred when one developer unpublished his npm modules and broke thousands of other modules that were dependent on it, so yes β€” fewer dependencies is definitely better.

So, to summarize:

Formik React Hook Form
Weekly Downloads 1,486,953 893,036
Size 12.6kB 5.2kB
Open Issues 510 2
Dependencies 9 0
Winner πŸ₯‡

With its smaller size and zero dependencies, React Hook Form is the clear winner here.

Performance comparison between React Hook Form and Formik

Component re-renders are an important factor to consider when implementing any functionality in React. We want to avoid unnecessary re-render cycles as much as possible, as this could lead to major performance issues as an app grows. So let’s see how Formik measures up to React Hook Form:

πŸ‘ Formik Re-renders
Total re-renders: 30+
πŸ‘ React Hook Form Re-renders
Total re-renders: 3

But why is there such a large difference in the number of renders between the two libraries? And why hasn’t Formik yet caught up with React Hook Form? The answer relies on the architecture of the libraries and the way they are designed from the core. React Hook Form isolates input components from the rest, preventing the whole form to re-render for a single field change.

Other libraries, including Formik, rely on form updates to cascade changes to the inputs, and although it has some advantages in terms of flexibility, this has a huge cost on performance.

Another performance concern when developing React applications is the time to mount, which refers to the time it takes React to insert a component into the DOM. Naturally, we aim for the lowest time to mount possible because longer mounting times can cause perceived latencies and delays. Again, let’s square up Formik vs. React Hook Form:

Formik:

πŸ‘ Formik Time To Mount

  • No. of mounts: 6
  • No. of committing changes: 1
  • Total time: 2070ms

React Hook Form:

πŸ‘ React Hook Form Time To Mount

  • No. of mounts: 1
  • No. of committing changes: 1
  • Total time: 1800ms

The above tests are based on a very simple form, so increasing the complexities would also cause the difference in time to mount to increase, but it is clear that React Hook Form outperforms Formik. In summary:

Formik React Hook Form
Re-renders Updates occur on form level Renders occur in isolation for particular fields
No. of mounts It mounts the form, some additional components, and uses a special component for fields Only requires mounting the form
No. of comitting changes 1 1
Total mounting time 2070ms 1800ms
Winner πŸ₯‡

With its fewer re-renders and quicker time to mount, React Hook Form is the clear winner.

The tests are from the React Hook Form website, and the code and text explanations can be found there.

Development comparison

To evaluate the subtle differences and the caveats of each library, we are going to build a form with several different input types and validations:

Field Name Field Type Field Validation Required
Username Text Max length = 20 βœ…
Name Text Max length = 50 βœ…
Email Email Valid Email (Pattern) βœ…
Mobile Number Tel Max length = 12 ❌
Website URL None ❌
Password Password Uppercase, lowercase, number/special char, and min. 8 chars βœ…
Gender Radio None ❌
Date of Birth Date MM/DD/YYYY ❌
About Textarea None ❌
Subscribe to Newsletter Checkbox None ❌

I added Bootstrap to the form for aesthetics, but also to demonstrate how easy it is integrated into each respective module. The submit event will log the form data to the console.

I did not include any additional libraries for validations or assisting with the state management; we will rely purely on the functionality of each library.


Over 200k developers use LogRocket to create better digital experiences

πŸ‘ Image
Learn more β†’

React Hook Form

As I started with developing the form, I discovered the React Hook Form form builder:

πŸ‘ React Hook Form Form Builder

This proved to be a game-changer, as it allows users to very easily create the form fields and their respective validations.

Note that the form builder is not a one-size-fits-all solution, but it does allow us to quickly bootstrap a form with generic HTML5 input fields. I needed to adjust a few minor things, especially when applying the Bootstrap elements and classes, but it did still save a lot of time.

Below is the CodeSandbox for the React Hook Form form:

React Hook Form Example

React Hook Form Example by sieg-g using react, react-dom, react-hook-form, react-scripts

I found the development to be really simple, and the great thing about React Hook Form is that it allows you to plug it into basically any framework or UI library.

In this example, we are using React Hook Form with a standard HTML5 form, inputs, and validation patterns. The error message integration also proved to be quick, simple, and easy to implement.

Below is an example of a form input, validation, and error message:

<div className="form-group">
 <input
 className="form-control"
 type="text"
 placeholder="Username"
 {...register("Username", { required: true, maxLength: 20 })}
 />
 {errors.Username &&
 errors.Username.type === "required" &&
 errorMessage(required)}
 {errors.Username &&
 errors.Username.type === "maxLength" &&
 errorMessage(maxLength)}
</div>

Overall, I found React Hook Form to be a developer-friendly experience. I enjoy how light, clear, and concise the code is!

Using Formik to build forms

It is important to highlight that Formik has two different ways to build forms, one that makes use of a Formik component and Formik-provided fields. This method harnesses the full power of Formik, enabling all its features and characteristics.


More great articles from LogRocket:




The second way to build a Formik form is by using the useFormik hook, which is a simpler way to build forms, but comes with limitations and is recommended only for simpler scenarios.

Let’s now introduce our form using the Formik component:

fervent-albattani-2kums

fervent-albattani-2kums by bajcmartinez using formik, react, react-dom, react-scripts

Just like React Hook Form, Formik also proved to be an excellent development tool and was simple to implement.

Below is an example of form input, validation, and an error message:

<div className="form-group">
 <Field
 className="form-control"
 type="text"
 placeholder="Username"
 name="username"
 validate={validateUserName}
 />
 {errors.username &&
 touched.username &&
 errorMessage(errors.username)}
</div>

It is implemented in a very similar way to React Hook Form, but notice that Formik makes use of the <Field/> component, unlike React Hook Form, which can be used with just HTML5 input elements.

Validation with Formik also needs to be explicitly developed and applied to each input, or through the help of validation libraries like Yup:

const validateUserName = value => {
 let error;
 if (!value) {
 error = required;
 } else if (value.length > 12) {
 error = maxLength;
 }
 return error;
};

Conclusion

Both Formik and React Hook Form are powerful libraries that will enable you to build any form you may need. They are architectured differently, with React Hook Form leading in terms of performance and ease of implementation β€” in part thanks to being a newer library built for modern React applications.

It may not come as a surprise that I’m in favor of React Hook Form for the reasons presented in this post, but I’ve worked with Formik many times and always had pleasant experiences. Both libraries will get the job done well, and ultimately, it’s up to you to choose one in favor of the other. Keep in mind that if you are working with class components, you must choose Formik.

To summarize the discussion on this article:

<Field component="textarea" />

And the winner is:

Get set up with LogRocket's modern React error tracking in minutes:

  1. Visit https://logrocket.com/signup/ to get an app ID
  2. Install LogRocket via npm or script tag. LogRocket.init() must be called client-side, not server-side

    $ npm i --save logrocket 
    
    // Code:
    
    import LogRocket from 'logrocket'; 
    LogRocket.init('app/id');
     
    // Add to your HTML:
    
    <script src="https://cdn.lr-ingest.com/LogRocket.min.js"></script>
    <script>window.LogRocket && window.LogRocket.init('app/id');</script>
     
  3. (Optional) Install plugins for deeper integrations with your stack:
    • Redux middleware
    • NgRx middleware
    • Vuex plugin
Get started now
Formik React Hook Form
Winner πŸ₯‡

Additional functionality and features

Formik React Hook Form
React Native βœ… βœ…
TypeScript βœ… βœ…
Nested components βœ… βœ…
Class components βœ… ❌
Code examples βœ… βœ…
Clear documentation βœ… βœ…
YUP integration βœ… βœ…
Redux integration βœ… βœ…
πŸ‘ Image
πŸ‘ Image
πŸ‘ Image

Stop guessing about your digital experience with LogRocket

Get started for free

Recent posts:

Debug Next.js apps with AI agents and next-browser

Learn how next-browser gives AI agents runtime context for debugging Next.js apps, including React props, hydration, PPR, forms, and performance.

πŸ‘ Image
Emmanuel John
Jun 17, 2026 β‹… 9 min read

Stop hardcoding LLM SDKs: Dynamic LLM routing with OpenRouter and Next.js

Build dynamic LLM routing in Next.js with OpenRouter, TanStack AI, task classification, model fallbacks, and cost-aware routing.

πŸ‘ Image
Chizaram Ken
Jun 16, 2026 β‹… 13 min read

What is TSRX?: What JSX would look like if it were designed today

TSRX adds first-class control flow, conditional hooks, and scoped styles to React via a TypeScript compiler extension β€” no new framework required.

πŸ‘ Image
Ikeh Akinyemi
Jun 12, 2026 β‹… 6 min read

How to add authentication to a React Native app with Better Auth

Learn how to build a full React Native auth system using Better Auth and Expo β€” with email/password login, Google OAuth, session persistence, and protected routes.

πŸ‘ Image
Chinwike Maduabuchi
Jun 9, 2026 β‹… 13 min read
View all posts

Would you be interested in joining LogRocket's developer community?

Join LogRocket’s Content Advisory Board. You’ll help inform the type of content we create and get access to exclusive meetups, social accreditation, and swag.

Sign up now