Formik Field 使用 Yup 验证
Formik Field validate using Yup
我正在查看 docs,您可以通过将 validate
传递给 Field
来验证 Field
,这是一个函数。
例如
const validate = value => {
let errorMessage;
if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(value)) {
errorMessage = 'Invalid email address';
}
return errorMessage;
};
...
<Field validate={validate} name="email" type="email" />
如何将函数 validate
替换为使用 Yup
?
如果你要问我为什么要这样做...
我不想拥有巨大的 validationSchema
对象,而是想将 Yup
验证对象直接传递给 Field
,因为我的表单是动态生成的。
出于某种原因,Formik 似乎没有提供本地执行此操作的方法。你可以这样做:
<Field
name="email"
type="email"
validate={value =>
Yup.string()
.matches(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i, "Invalid")
.validate(value)
.then(() => undefined)
.catch(({ errors }) => errors[0])
}
/>
Working example 在 CodeSandbox 上。
我正在查看 docs,您可以通过将 validate
传递给 Field
来验证 Field
,这是一个函数。
例如
const validate = value => {
let errorMessage;
if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(value)) {
errorMessage = 'Invalid email address';
}
return errorMessage;
};
...
<Field validate={validate} name="email" type="email" />
如何将函数 validate
替换为使用 Yup
?
如果你要问我为什么要这样做...
我不想拥有巨大的 validationSchema
对象,而是想将 Yup
验证对象直接传递给 Field
,因为我的表单是动态生成的。
出于某种原因,Formik 似乎没有提供本地执行此操作的方法。你可以这样做:
<Field
name="email"
type="email"
validate={value =>
Yup.string()
.matches(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i, "Invalid")
.validate(value)
.then(() => undefined)
.catch(({ errors }) => errors[0])
}
/>
Working example 在 CodeSandbox 上。