Formik 是一个流行的 React 库,用于构建和管理表单状态。它简化了表单处理过程,包括验证、错误处理和状态管理。字段数组(Field Arrays)是 Formik 中的一个高级功能,允许你动态地添加、删除和渲染表单字段。
类型:
应用场景:
以下是一个使用 Formik 和字段数组进行表单验证的简单示例:
import React from 'react';
import { Formik, Form, FieldArray, Field } from 'formik';
import * as Yup from 'yup';
const validationSchema = Yup.object({
items: Yup.array().of(
Yup.object({
name: Yup.string().required('Required'),
quantity: Yup.number().min(1, 'Must be at least 1').required('Required')
})
)
});
const DynamicForm = () => (
<Formik
initialValues={{ items: [{ name: '', quantity: '' }] }}
validationSchema={validationSchema}
onSubmit={(values) => {
console.log(values);
}}
>
{({ values, errors, touched, setFieldValue, push, remove }) => (
<Form>
<FieldArray name="items">
{arrayHelpers => (
<div>
{values.items.map((item, index) => (
<div key={index}>
<Field name={`items.${index}.name`} />
{errors.items && touched.items ? (
<div>{errors.items[index].name}</div>
) : null}
<Field name={`items.${index}.quantity`} type="number" />
{errors.items && touched.items ? (
<div>{errors.items[index].quantity}</div>
) : null}
<button type="button" onClick={() => arrayHelpers.remove(index)}>Remove</button>
</div>
))}
<button type="button" onClick={() => arrayHelpers.push({ name: '', quantity: '' })}>Add Item</button>
</div>
)}
</FieldArray>
<button type="submit">Submit</button>
</Form>
)}
</Formik>
);
export default DynamicForm;
常见问题:
validationSchema
正确设置,并且 Yup 的验证规则正确应用。push
方法是否正确调用,并且初始值设置合理。errors
和 touched
状态正确更新,并且在渲染时正确引用。解决方法:
errors
对象的内容,确保验证错误被正确捕获。initialValues
中的字段数组设置正确,特别是动态添加字段时的初始状态。通过以上步骤,可以有效解决 Formik 字段数组中的验证问题。
领取专属 10元无门槛券
手把手带您无忧上云