Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
import React from 'react';
import { View, Dimensions } from 'react-native';
import { Formik } from 'formik';
import * as Yup from 'yup';
import { TextInput, Button } from '../components';
const validationSchema = Yup.object().shape({
username: Yup.string()
.min(4, 'Too Short!')
.max(24, 'Too Long!')
.required('Required'),
password: Yup.string()
.min(6, 'Too short password')
.max(30, 'Too long')
.required('Required'),
securityCode: Yup.number()
.min(99999, 'Too Short!')
.max(999999, 'Too Long!')
.required('Required'),
});
const { width } = Dimensions.get('window');
const LoginForm = componentProps => (
<Formik
validationSchema={validationSchema}
initialValues={componentProps.initialValues}
onSubmit={componentProps.onSubmit}
validateOnChange={false}
validateOnBlur={false}
>
{props => (
<View style={{ width, padding: 10 }}>
<TextInput
placeholder="Username"
returnKeyType="done"
onChangeText={props.handleChange('username')}
error={props.errors.username}
onBlue={props.handleBlur('username')}
value={props.values.username}
/>
<TextInput
secureTextEntry
placeholder="Password"
returnKeyType="done"
onChangeText={props.handleChange('password')}
error={props.errors.password}
onBlue={props.handleBlur('password')}
value={props.values.password}
/>
<TextInput
error={props.errors.securityCode}
keyboardType="number-pad"
returnKeyType="done"
placeholder="Google Authentication code"
onChangeText={props.handleChange('securityCode')}
onBlue={props.handleBlur('securityCode')}
value={props.values.securityCode}
/>
<Button
secondary
rounded
style={{ alignSelf: 'stretch', marginTop: 35 }}
caption="Login"
onPress={props.handleSubmit}
/>
</View>
)}
</Formik>
);
export default LoginForm;
<InputCheckbox name="remember" value="yes" />для валидации форм любой сложности.
Валидация сложных форм React. Часть 1