是的,使用 Formik 进行条件验证

Yup conditional validation with Formik

我试图让一个字段 "old_password" 只有在另一个字段 "password" 填充了一些值时才需要。

在 Yup 中使用 .when() 函数时它有效,但是当另一个字段 "password" 变空时,"old_password" 仍然给我错误消息,它是必需的,即使虽然 "password" 是空的。

此外,当我执行此操作时,"name" 字段验证由于某种原因不再起作用。

我不知道怎么解决。

这是示例代码...

https://codesandbox.io/s/wizardly-frost-sq7fq

对于那些感兴趣的人,我从 Github 上的 "Yup" 回购页面发现 Formik 在字段为空时将字段设置为 "undefined" ...

https://github.com/jquense/yup/issues/736

所以,你必须这样做......

is: value => value && value.length > 0

我更新了 "Codesandbox" 上的代码以反映这一点。

此外,错误消息只会在此时触摸该字段时显示,因此即使您在 "password" 字段中输入并且之前没有触摸 "old_password" 字段,该消息不会出现。所以为了避免我也编辑了输入组件来传递一个 "showErrorOnTouch" 道具来控制这个 ...

https://codesandbox.io/s/yup-conditional-validation-with-formik-sq7fq

我希望这对以后的人有所帮助。