Условная проверка поля Formik с помощью YUP через обработчик состояния? - PullRequest
0 голосов
/ 05 мая 2020

Я искал вокруг, не уверен, возможно ли это. По сути, я хочу проверить форму formik с помощью YUP, используя обработчик состояния, который не является значением формы.

 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 Ответ

1 голос
/ 06 мая 2020

Ваше решение будет работать, если approvalState находится в значениях formik:

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

В качестве альтернативы вы можете сделать:

Yup.object({
  comments: approvalState
              ? Yup.string()
              : Yup.string().required('Comments are required when denying an approval.')

})
...