通过状态挂钩使用YUP有条件地验证Formik字段吗?

时间:2020-05-04 21:20:49

标签: react-hooks formik yup

我已经四处搜寻,不确定是否可行。本质上,我想使用非表单值的状态挂钩来通过YUP验证Formik表单。

 validationSchema={Yup.object({
          comments: Yup.string()
              .when(approvalState, {
                is: false,
                then: Yup.string().required('Comments are required when denying an approval.'),
              }),
        })}

这是表单字段,它本质上是一个文本框:

这是“提交”按钮,它将状态值更改为true:

<button className='buttonPrimary' type='submit' onClick={()=> setApprovalState(true)} disabled={formik.isSubmitting}>Approve</button>

这是另一个也提交的按钮,将状态值更改为false:

<button className={`buttonSecondary ${styles.marginRight}`} type='submit' onClick={()=> setApprovalState(false)} disabled={formik.isSubmitting}>Deny</button>

状态值可以很好地更新,是否可以根据某种状态有条件地根据需要验证文本框?

1 个答案:

答案 0 :(得分:1)

如果Array ( [0] => Array ( [0] => first [1] => 32 ) ) Array ( [0] => Array ( [0] => first [1] => 11 ) ) 的格式为福克,您的解决方案将起作用:

approvalState

或者,您可以执行以下操作:

Yup.object({
  comments: Yup.string()
               .when('approvalState', { // Change approvalState to string
                 is: false,
                 then: Yup.string().required('Comments are required when denying an approval.'),
               }),
})