Причина, по которой это не работает, заключается в том, что при первом go переходе на эту страницу компонент Formik
монтируется и отображается. Затем, когда вы нажимаете кнопку «Далее» или «Назад», он не монтируется снова, он просто обновляется, поэтому он больше не запускает проверку.
Если у вас есть кнопки «Назад» и «Далее», я предполагаю, что вы используете их для увеличения index
или step
переменная / состояние. Что вы можете сделать, так это вручную запустить вызов проверки validateForm()
из useEffect
, который имеет состояние step
как deps
:
<Formik
enableReinitialize
validationSchema={ validationSchema }
initialValues={ initialValues }
validateOnMount
render={({
isValid,
values,
isSubmitting,
handleChange,
setFieldValue,
setFieldTouched,
validateForm,
}) => {
useEffect(() => {
// This will be called everytime `step` changes:
validateForm();
}, [step]);
return (<Form ...>...</Form>)
}}
/>
В качестве альтернативы вы можете попробовать использовать initialErrors
, но это может вызвать проверку, когда на самом деле в этом нет необходимости, если есть что-то еще, кроме step
, которое может вызвать повторную визуализацию:
<Formik
initialErrors={ validationSchema.isValidSync(initialData) }
...
/>
Кроме того, похоже, что в настоящее время открыта связанная ошибка, и предлагаемое временное исправление также использует useEffect
, поэтому даже если вы go для initialErrors
, вам все равно может потребоваться добавить useEffect
, пока проблема не будет устранена:
https://github.com/jaredpalmer/formik/issues/1950