看起来在某些情况下,Formik的“isValid”标志被设置为true
,即使表单值不应被视为有效。我有一个工作的codesandbox示例,下面展示了这个问题。
我用于表单的验证模式如下:
const validationSchema = Yup.object().shape(
{
heading: Yup.string().required('Heading required.'),
image: Yup.string().when('placeholder', {
is: '',
then: Yup.string().required(
'Please either choose an image, or a placeholder.'
),
otherwise: Yup.string(),
}),
placeholder: Yup.string().when('image', {
is: '',
then: Yup.string().required(
'Please either choose an image, or a placeholder.'
),
otherwise: Yup.string(),
}),
},
[['image', 'placeholder']]
);
在输出 Formik 的 isValid
标志时,以下值为 true
:
{ heading: 'a', image: '', placeholder: '' }
架构规定“image”或“placeholder”字段之一必须存在,但在上述情况下它们不存在。然而,isValid
标志为true
。
使用Yup手动测试时,我得到了预期的结果:
validationSchema.validate(values).then(...).catch(...);
在codesandbox中可以进一步看到这一点。我错过了什么吗?当Formik验证值时,背后还有更多的事情发生吗?