How to validate nested fields with Formik and Yup
2 November 2022 (Updated 26 October 2023)
Suppose you have a Formik form that contains a user
field like this
{
user: {
name: 'Jim',
age: 30,
}
}
How can you take advantage of Formik’s support for using Yup with its validationSchema
API to validate a user
field like in the example above?
Here’s how:
import { Formik, Form, FormikProps } from 'formik'
import * as yup from 'yup'
import { Dump } from './Dump'
import { TextInput } from './TextInput'
interface FormValues {
user: {
name: string
age: string
}
}
const App: React.FC = () => {
const validationSchema = yup.object().shape({
user: yup.object().shape({
name: yup.string().required(),
age: yup.string().required()
})
})
return (
<div className="wrapper">
<Formik
initialValues={{
user: {
name: '',
age: ''
}
}}
validationSchema={validationSchema}
onSubmit={() => {
console.log('Form submitted.')
}}
>
{({ values, errors }: FormikProps<FormValues>) => (
<Form>
<Dump title="Form values" value={values} />
<Dump title="Form errors" value={errors} />
<TextInput name="user.name" placeholder="Name" />
<TextInput name="user.age" placeholder="Age" />
</Form>
)}
</Formik>
</div>
)
}
export default App
Thanks for your comment 🙏. Once it's approved, it will appear here.
Leave a comment