How to use Formik in React

Using Formik in React simplifies complex form handling by providing built-in state management, validation, and error handling with minimal boilerplate code. As the creator of CoreUI with extensive React experience since 2014, I’ve implemented Formik in numerous enterprise applications for robust form management and user data collection. The most efficient approach uses Formik’s useFormik hook to handle form state, validation, and submission in a clean, declarative manner. This method provides comprehensive form functionality while maintaining excellent performance and developer experience for complex form scenarios.

Use Formik’s useFormik hook to handle form state, validation, and submission with minimal code.

import { useFormik } from 'formik'
import * as Yup from 'yup'

const ContactForm = () => {
    const formik = useFormik({
        initialValues: {
            name: '',
            email: '',
            message: ''
        },
        validationSchema: Yup.object({
            name: Yup.string()
                .min(2, 'Name must be at least 2 characters')
                .required('Name is required'),
            email: Yup.string()
                .email('Invalid email address')
                .required('Email is required'),
            message: Yup.string()
                .min(10, 'Message must be at least 10 characters')
                .required('Message is required')
        }),
        onSubmit: async (values, { setSubmitting, resetForm }) => {
            try {
                await submitForm(values)
                resetForm()
            } catch (error) {
                console.error('Form submission error:', error)
            } finally {
                setSubmitting(false)
            }
        }
    })

    return (
        <form onSubmit={formik.handleSubmit}>
            <input
                type="text"
                name="name"
                placeholder="Your Name"
                value={formik.values.name}
                onChange={formik.handleChange}
                onBlur={formik.handleBlur}
            />
            {formik.touched.name && formik.errors.name && (
                <div className="error">{formik.errors.name}</div>
            )}

            <input
                type="email"
                name="email"
                placeholder="Your Email"
                value={formik.values.email}
                onChange={formik.handleChange}
                onBlur={formik.handleBlur}
            />
            {formik.touched.email && formik.errors.email && (
                <div className="error">{formik.errors.email}</div>
            )}

            <button type="submit" disabled={formik.isSubmitting}>
                {formik.isSubmitting ? 'Submitting...' : 'Submit'}
            </button>
        </form>
    )
}

This code demonstrates complete Formik integration with initial values, Yup schema validation, and submission handling. Formik manages form state automatically and provides handlers for input changes, validation triggering, and form submission. The validation schema defines rules and error messages, while the touch tracking ensures errors only display after user interaction. Formik’s built-in submission state management handles loading states and form reset functionality.

Best Practice Note:

This is the Formik pattern we use in CoreUI Pro form components for enterprise-grade form handling. Combine Formik with Yup validation and CoreUI form components for consistent, accessible, and maintainable form experiences.


Speed up your responsive apps and websites with fully-featured, ready-to-use open-source admin panel templates—free to use and built for efficiency.


About the Author

Subscribe to our newsletter
Get early information about new products, product updates and blog posts.
How to force a React component to re-render
How to force a React component to re-render

How to loop through an array in JavaScript
How to loop through an array in JavaScript

How to compare dates with JavaScript
How to compare dates with JavaScript

Dealing with Sass Deprecation Warnings in Angular 19
Dealing with Sass Deprecation Warnings in Angular 19

Answers by CoreUI Core Team