Arrays and Nested Objects
Formik has support for nested objects and arrays out of the box. These subjects are somewhat related because they both leverage the same syntax.
#
Nested ObjectsThe name
props in Formik can use lodash-like dot paths to reference nested Formik values. This means that you do not need to flatten out your form's values anymore.
import React from 'react';import { Formik, Form, Field } from 'formik';
export const NestedExample = () => ( <div> <h1>Social Profiles</h1> <Formik initialValues={{ social: { facebook: '', twitter: '', }, }} onSubmit={values => { // same shape as initial values console.log(values); }} > <Form> <Field name="social.facebook" /> <Field name="social.twitter" /> <button type="submit">Submit</button> </Form> </Formik> </div>);
#
ArraysFormik also has support for arrays and arrays of objects out of the box. Using lodash-like bracket syntax for name
string you can quickly build fields for items in a list.
import React from 'react';import { Formik, Form, Field } from 'formik';
export const BasicArrayExample = () => ( <div> <h1>Friends</h1> <Formik initialValues={{ friends: ['jared', 'ian'], }} onSubmit={values => { // same shape as initial values console.log(values); }} > <Form> <Field name="friends[0]" /> <Field name="friends[1]" /> <button type="submit">Submit</button> </Form> </Formik> </div>);
For more information around manipulating (add/remove/etc) items in lists, see the API reference section on the <FieldArray>
component.
#
Avoid nestingIf you want to avoid this default behavior Formik also has support for it to have fields with dots.
import React from 'react';import { Formik, Form, Field } from 'formik';
export const NestedExample = () => ( <div> <h1>Social Profiles</h1> <Formik initialValues={{ 'owner.fullname': '', }} onSubmit={values => { // same shape as initial values console.log(values); }} > <Form> <Field name="['owner.fullname']" /> <button type="submit">Submit</button> </Form> </Formik> </div>);