Formik 原生支持嵌套对象和数组。这两个主题在某种程度上是相关的,因为它们都利用相同的语法。
Formik 中的 name
属性可以使用类似 lodash 的点路径来引用嵌套的 Formik 值。这意味着您不再需要展平表单的值。
import React from 'react';import { Formik, Form, Field } from 'formik';export const NestedExample = () => (<div><h1>Social Profiles</h1><FormikinitialValues={{social: {facebook: '',twitter: '',},}}onSubmit={values => {// same shape as initial valuesconsole.log(values);}}><Form><Field name="social.facebook" /><Field name="social.twitter" /><button type="submit">Submit</button></Form></Formik></div>);
Formik 还原生支持数组和对象数组。使用类似 lodash 的括号语法作为 name
字符串,您可以快速构建列表中项目的字段。
import React from 'react';import { Formik, Form, Field } from 'formik';export const BasicArrayExample = () => (<div><h1>Friends</h1><FormikinitialValues={{friends: ['jared', 'ian'],}}onSubmit={values => {// same shape as initial valuesconsole.log(values);}}><Form><Field name="friends[0]" /><Field name="friends[1]" /><button type="submit">Submit</button></Form></Formik></div>);
有关操作(添加/删除等)列表中项目的更多信息,请参阅 <FieldArray>
组件的 API 参考部分。
如果您想避免这种默认行为,Formik 也支持使用带点的字段。
import React from 'react';import { Formik, Form, Field } from 'formik';export const NestedExample = () => (<div><h1>Social Profiles</h1><FormikinitialValues={{'owner.fullname': '',}}onSubmit={values => {// same shape as initial valuesconsole.log(values);}}><Form><Field name="['owner.fullname']" /><button type="submit">Submit</button></Form></Formik></div>);