Я использую Material-UI, Formik и Yup для создания формы. Проверка для одного из полей (Credential) зависит от коммутатора. Проблема в том, что когда я go из Вкл. В Выкл., Проверка происходит сразу, но когда я go из Вкл. Вкл., Я должен нажать на другой компонент (например, TextBox), чтобы запустить проверку и сделать formik. IsValid = правда.
Объект formik:
const formik = useFormik({
initialValues: formValues,
validationSchema: validationSchema,
onSubmit: () => { },
initialTouched: initialTouched,
validateOnMount: true
});
Это проверка схемы:
const validationSchema = Yup.object({
credential: Yup.object<Credential>().nullable()
.when('roleBasedAccess', {
is: false,
then: Yup.object<Credential>().nullable().required('Credential is required')
}),
name: Yup.string()
.max(1000, 'Name must contain at most 1000 characters')
.trim()
.when('connectionType', {
is: ConnectionType.S3,
then: Yup.string()
.trim()
.required('Name is required')
})
});
Это компонент коммутатора:
<Switch
checked={formik.values.roleBasedAccess}
onChange={handleRoleBasedChange}
color="primary"
value="roleBasedAccess"
onBlur={() => { formik.validateForm() }}
/>
Включите ChangeHandler:
const handleRoleBasedChange = (event: any) => {
formik.setFieldValue('roleBasedAccess', !formik.values.roleBasedAccess);
};
Это сводит меня с ума. Есть предложения?