У меня многоэтапная форма. В настоящее время родительский компонент получает данные о состоянии через реквизиты, передаваемые компонентам формы. Кнопка отправки находится в родительском компоненте. Это работает, и шаги работают. Однако при нажатии на поле ввода, когда оно теряет фокус, оно выдает сообщение об ошибке каждого поля в многоступенчатой форме вместо поля, которое вызвало ошибку, и является единственным полем с ошибкой. Я использую error
опору <TextField/>
, чтобы вызвать визуальные ошибки для пользователя. Поля также проверяются в validateAuth.js
, а значения обрабатываются в useFormValidation.js
. Я также застрял при отправке данных формы регистрации пользователя из состояния родительских компонентов из одной кнопки отправки в родительском компоненте.
Я уже пытался установить ошибки = {ошибки} и использовать операторы if в пределахПерехватчики useEffect, такие как
React.useEffect(() => {
if (props.errors) {
setErr(true)
}
}, [err, props.errors]);
Однако, это привело к загрузке всей моей страницы с ошибками, отображаемыми без какого-либо пользовательского ввода.
Вот песочница с кодом, похожая на мои точные настройки разработки.
Код такой же, только упрощенный с базовыми элементами.
https://codesandbox.io/s/hooks-custom-authentication-final-8ldcw
Ожидаемые результаты: многоступенчатая форма загружает, проверяет поля каждый раз, когда пользователь пытается перейтидля перехода к следующему шагу, нажав кнопку Далее, если есть ошибка, покажите поле, вызвавшее ошибку только красным, и отобразите текст ошибки через helpertext material-ui. Пользователь не должен иметь возможность перейти к следующему шагу, если в поле ввода в этом шаге возникает ошибка. Когда в поле отображается ошибка, остальные поля, которые не были ошибочными, остаются в своем нормальном состоянии с ошибками. На последнем шаге кнопка «Подтвердить» отправляет данные пользователя для регистрации.
Факт: форма вызывает ошибки во всех полях после нажатия любого поля ввода, затем пользователь щелкает в любом другом месте и приводит к тому, что поле теряет фокус. Пользователи могут свободно нажимать на шагах регистрации независимо от ошибок.