Skip to main content

Getting Started

Installation​

npm add formik formik-mui @mui/material @emotion/react @emotion/styled

MUI X Date and Time Pickers (Optional)​

npm add formik-mui-x-date-pickers @mui/x-date-pickers @mui/system

Note: You also need to install a date-library of your choice. Visit MUI documentation for more information.

Quick Start​

import { Button, LinearProgress } from '@mui/material';
import { Formik, Form, Field } from 'formik';
import { TextField } from 'formik-mui';
import * as React from 'react';

interface Values {
email: string;
password: string;
}

function App() {
return (
<Formik
initialValues={{
email: '',
password: '',
}}
validate={(values) => {
const errors: Partial<Values> = {};
if (!values.email) {
errors.email = 'Required';
} else if (
!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(values.email)
) {
errors.email = 'Invalid email address';
}
return errors;
}}
onSubmit={(values, { setSubmitting }) => {
setTimeout(() => {
setSubmitting(false);
alert(JSON.stringify(values, null, 2));
}, 500);
}}
>
{({ submitForm, isSubmitting }) => (
<Form>
<Field
component={TextField}
name="email"
type="email"
label="Email"
/>
<br />
<Field
component={TextField}
type="password"
label="Password"
name="password"
/>
{isSubmitting && <LinearProgress />}
<br />
<Button
variant="contained"
color="primary"
disabled={isSubmitting}
onClick={submitForm}
>
Submit
</Button>
</Form>
)}
</Formik>
);
}

Note: that the Field wrapper is not used, for more details on why see the FAQ.

Configuring Components​

Several properties are purposefully excluded, please see the FAQ for details.

import AccountCircle from '@mui/icons-material/AccountCircle';
import InputAdornment from '@mui/material/InputAdornment';
import { TextField } from 'formik-mui';

<TextField
name="customized"
label="Outlined"
variant="outlined"
InputProps={{
startAdornment: (
<InputAdornment position="start">
<AccountCircle />
</InputAdornment>
),
}}
/>;

Quick Start (MUI X Date and Time Pickers)​

See MUI X Date and Time Pickers Getting started for more information.

import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'; // Depending on the library you picked
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import Button from '@mui/material/Button';
import LinearProgress from '@mui/material/LinearProgress';
import { Formik, Form, Field } from 'formik';
import {
DatePicker,
DateTimePicker,
TimePicker,
} from 'formik-mui-x-date-pickers';
import * as React from 'react';

function App() {
return (
<LocalizationProvider dateAdapter={AdapterDateFns}>
<Formik
initialValues={{
date: new Date(),
time: new Date(),
dateTime: new Date(),
}}
onSubmit={(values, { setSubmitting }) => {
setTimeout(() => {
setSubmitting(false);
alert(JSON.stringify(values, null, 2));
}, 500);
}}
>
{({ submitForm, isSubmitting }) => (
<Form>
<Field
component={DatePicker}
name="date"
label="Date"
textField={{ helperText: 'Helper text', variant: 'filled' }}
/>
<br />
<Field
component={DateTimePicker}
name="dateTime"
label="Date Time"
/>
<Field component={TimePicker} name="time" label="Time" />
<br />
{isSubmitting && <LinearProgress />}
<br />
<Button
variant="contained"
color="primary"
disabled={isSubmitting}
onClick={submitForm}
>
Submit
</Button>
</Form>
)}
</Formik>
</LocalizationProvider>
);
}

Configuring Components​

Several properties are purposefully excluded, please see the FAQ for details.

import AccountCircle from '@mui/icons-material/AccountCircle';
import InputAdornment from '@mui/material/InputAdornment';
import { TextField } from 'formik-mui';

<TextField
name="customized"
label="Outlined"
variant="outlined"
InputProps={{
startAdornment: (
<InputAdornment position="start">
<AccountCircle />
</InputAdornment>
),
}}
/>;