Вопрос
Благодаря реквизитам я могу создать отдельный пользовательский компонент textInput для обработки разных проверок?
Код
Внизу вы найдете главный экран входа в систему, он действительно прост и состоит из 2 текстовых вводов.
import React, { PureComponent, } from 'react';
import { View } from 'react-native';
import MkTextInput from '../../components/MkTextInput'
class LoginScreen extends PureComponent {
state = {
username: '',
password: '',
}
textChanged = fieldName => newValue => this.setState({ [fieldName]: newValue });
render() {
const { username } = this.state;
return(
<View>
<MkTextInput placeholderName='Username' usernameValidation value={username} onChangeText={this.textChanged('username')}/>
<MkTextInput placeholderName='Password' passwordValidation value={username} onChangeText={this.textChanged('password')} />
</View>
)
}
}
export default LoginScreen;
Ниже здесь находится MkTextInputComponent
import React, { PureComponent, Fragment } from 'react';
import { Item, Input, Icon } from 'native-base';
import { userValidation, isTooShort } from '../utils/Validations/UserAndPassValidation';
import { passwordValidator } from '../utils/Validations/PasswordValidation';
import { styles } from './styles';
//ricorda di tradurre tutti i path in path assoluti -->leggi la documentazione.
class MkTextInput extends PureComponent {
state = {
data: '',
}
render() {
const { placeholderName,
usernameValidation,
passwordValidation,
emailValidation,
onChangeText,
value,
} = this.props;
const checkedUsername = usernameValidation ? userValidation(value) : false;
const checkedPassword = passwordValidation ? passwordValidator (value) : false;
return (
<Fragment>
<Item style={styles.container}>
<Input placeholder={placeholderName}
onChangeText={onChangeText}
secureTextEntry={checkedUsername? true : false}
style={checkedUsername ? styles.success : styles.failed}
/>
<Icon name={checkedUsername ? 'checkmark-circle' : 'close-circle'}/>
</Item>
</Fragment>
);
}
}
export default MkTextInput;
План
Моим первым намерением было установить указанное поведение на основена реквизитах, которые получат компоненты MkTextInput: Если у вас есть реквизит «passwordValidation», компонент выполнит проверку строки с этой строкой кода и проигнорирует оставшуюся проверку.
const checkedPassword = passwordValidation ? passwordValidator (value) : false;
, к несчастью,этот способ приводит меня к нескольким повторным рендерингам одного и того же компонента или изменяет стиль поля пароля, просто записывая его в поле имени пользователя.
Есть способ заставить вещи работать?