Я использовал ориентировочный валидатор для проверки формы. Валидация работает отлично. Тем не менее, навигация перестает работать, когда она записана внутри try, когда все операции проверки выполнены.
state ={
name:'',
email:'',
password:'',
password_confirmation:'',
error:{},
userAllData:'',
userData:''
}
Использовали asyn c и предоставили правила для электронной почты и пароля, тип данных и формат.
registerUser = async (data) => {
const rules = {
email:'required|email',
password:'required|string|min:5'
}
Отображаемые сообщения об ошибках и топор ios Вызов API.
const messages = {
required: (field) => `${field} is required.`,
'email.email': ' The email is required. ',
'password.min': 'Password is too short.',
}
try {
await validateAll(data, rules, messages)
const response = await axios.get('https://react-blog-
api.bahdcasts.com/api/auth/login', {
email:data.email,
password:data.password
})
this.setState({
userData:response.data.data.user,
userAllData:response.data.data
})
NavigationService.navigate('PublicHome')
}
catch(errors){
const formattedErrors = {}
if(errors.response && errors.response.status === 422){
formattedErrors['email'] = errors.response.data['email'][0]
this.setState({ error:formattedErrors, })
}
else{
errors.forEach(error => formattedErrors[error.field] = error.message)
this.setState({ error:formattedErrors })
}
}
}
Внутри рендера: у меня есть текстовые поля электронной почты и пароля с кнопкой, внутри которой я звоню this.registerUser(this.state)
на пресс обработчик.
<Button style={Styles.btn}
onPress={() => { this.registerUser(this.state) }}>
<Text style={Styles.loginBtnText}>{'Login'.toUpperCase()}</Text>
</Button>