Было бы неплохо, если бы вы представили некоторые мысли или код о том, как вы думаете, к нему можно подойти.Но способ, которым я это сделал, был довольно прост, в моем состоянии компонента я получил следующий объект:
this.state = {
loading: false,
username: {
text: '',
valid: false
},
password: {
text: '',
valid: false
},
isLoginValid: false
};
Затем в TextInput для имени пользователя, я бы сначала связал его значение с this.state.username.text
, также,во время onChangeText я просто делаю простую проверку поля, если форма довольно большая, у вас может быть switch(fieldtype)
где у вас есть для каждого поля, какой метод обработки вы хотите применить, также как и подтверждение.
onChangeText={ (text) => { this.validateInput(text, 'username')}}
(username будет вводом формы для объекта состояния)
Например, для имени пользователя вы хотите, чтобы длина была только длина! = 0 и длина <= 8 символов, для электронной почты вы можете запустить RegExp () спроверка адреса электронной почты, а также его длина, для пароля другая логика и т. д. ... после этого я просто сохраняю состояние для ввода этого поля и, если оно действительно или нет.Например: </p>
validateInput(text, fieldname) {
let stateObject = {
text: text,
valid: text.length !== 0
}
this.setState({ [fieldname]: stateObject }, () => {
this.checkValidation();
});
}
В checkValidation я проверяю все поля ввода и, если все поля действительны, я устанавливаю для formValid значение true.Этот formValid, например, позволит пользователю нажать на кнопку «Войти», в противном случае он применяет к нему непрозрачность 0,5 и отключает ее.
Остальное, как вы можете догадаться, это просто игра с действительными переменнымикаждого поля, что вы хотите отобразить, а что нет.В форме регистрации я также добавил значок X или «Tick», если введенное текстовое поле в порядке или нет.Пусть ваше воображение направляет вас.
Надеюсь, это поможет.