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>);