По сути, вы хотите применять только стили проверки ошибок / css ПОСЛЕ ТОГО, КАК форма сфокусирована пользователем.
Случаи, которые вы хотите обработать:
- Начальная загрузка страницы (без проверки ошибок, зеленый стиль, 0 мест)
- InputWasFocused (проверка ошибок, красный, если места недействительны)
Я не думаю, что UX очень хорошесли вход изначально зеленый, а отображается 0. Я бы лично оставил его белым и только показал, что он зеленый, ПОСЛЕ того, как было введено правильное значение, но это на ваше усмотрение.
В вашем состоянии:
this.state = {
inputTouched: false,
inputValue: 0,
inputWasFocused: false
}
Ваша обработка ошибок должна быть обновлена, чтобы проверять только ошибки. ПОСЛЕ того, как ввод был сфокусирован пользователем.
if(inputWasFocused) {
error={!!(inputValue > max || inputValue < min)}
}
Может быть реализована альтернативная логика, позволяющая просто использовать значение по умолчанию0, чтобы быть приемлемым входом, пока вход не был сфокусирован - однако я думаю, что вышеупомянутое также довольно ясно.
Затем, единственное, что вам нужно сделать, это установить состояние inputWasFocused как trueпосле того, как пользователь не сфокусировал ввод.
Добавьте обработчик к классу, в котором есть поле ввода / компонент ввода:
seatInputBlurHandler = () => {
this.setState({inputWasFocused: true})
}
И передайте обработчик в поле ввода, чтобыбыть выполнена onBlur Для этого добавьте следующее событие в поле ввода JSX:
<input type="text" onBlur={() => this.seatInputBlurHandler()}>
Итак, после всего этого: при загрузке страницы inputWasFocused имеет значение false, и проверка ошибок выполняетсяне применять.Когда пользователь выбирает ввод, ничего не происходит до тех пор, пока он не уйдет - и когда он это сделает, будет запущен onBlur и выполнено seatInputBlurHandler, в результате чего для inputWasFocused будет установлено значение true, и, таким образом, будет запущена логика проверки ошибок, и поле должно бытьсоответственно стилизовано после.
Если вам нужна помощь с синтаксисом JSX, пожалуйста, опубликуйте код JSX, где вы отображаете поле ввода.