陣列和巢狀物件

Formik 原生支援巢狀物件和陣列。這些主題有些相關,因為它們都使用相同的語法。

巢狀物件

Formik 中的 name 屬性可以使用類似 Lodash 的點路徑來參照巢狀的 Formik 值。這表示您不再需要將表單的值扁平化。

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

陣列

Formik 也原生支援陣列和物件陣列。使用類似 Lodash 的括號語法作為 name 字串,您可以快速為列表中的項目建立欄位。

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

有關操作(新增/移除/等)列表中項目的更多資訊,請參閱 <FieldArray> 元件的 API 參考章節。

避免巢狀

如果您想避免這種預設行為,Formik 也支援具有點號的欄位。

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>
);
這個頁面有幫助嗎?

訂閱我們的電子報

最新的 Formik 新聞、文章和資源,將會發送到您的收件匣。

版權所有 © 2020 Formium, Inc. 保留所有權利。