是的,使用 Formik 进行条件验证
Yup conditional validation with Formik
我试图让一个字段 "old_password" 只有在另一个字段 "password" 填充了一些值时才需要。
在 Yup 中使用 .when()
函数时它有效,但是当另一个字段 "password" 变空时,"old_password" 仍然给我错误消息,它是必需的,即使虽然 "password" 是空的。
此外,当我执行此操作时,"name" 字段验证由于某种原因不再起作用。
我不知道怎么解决。
这是示例代码...
对于那些感兴趣的人,我从 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
我希望这对以后的人有所帮助。
我试图让一个字段 "old_password" 只有在另一个字段 "password" 填充了一些值时才需要。
在 Yup 中使用 .when()
函数时它有效,但是当另一个字段 "password" 变空时,"old_password" 仍然给我错误消息,它是必需的,即使虽然 "password" 是空的。
此外,当我执行此操作时,"name" 字段验证由于某种原因不再起作用。
我不知道怎么解决。
这是示例代码...
对于那些感兴趣的人,我从 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
我希望这对以后的人有所帮助。