React-validate-framework: лёгкий расширяемый компонент для валидации в React
React-validate-framework — это лёгкий и расширяемый компонент валидации для React.
Особенности:
Ссылки:
Как использовать?
Установите пакет:
npm i react-validate-framework --save
.
Импортируйте:
import formConnect, {
Checkbox,
Radio,
Select,
Text,
Textarea,
Message,
} from 'react-validate-framework';
Определите правила и сообщения:
const schemas = {
email: {
rules: 'required | isEmail | maxLength(32) | validateFromServer',
messages: 'Can not be empty! | Please enter a valid email address. | Can not exceed {{param}} characters. | | The email already exists.',
},
hobby: {
rules: 'requiredField(phone) | selectLimit(2)',
messages: 'email and hobby at least one entry! | Select at least {{param}}.',
},
};
const methods = {
selectLimit(field, param) {
if (Array.isArray(field.value)) {
return field.value.length >= param;
}
return false;
},
requiredField(field, param) {
const otherField = this.fields[param];
return this.required(field) || (otherField.result && this.required(otherField));
},
async validateFromServer(field, param) {
return await doServerAPI();
},
};
Создайте базовую форму:
@formConnect(schemas, methods)
export default class BasicForm extends React.Component {
static propTypes = {
formControl: PropTypes.object,
};
constructor(props) {
super(props);
props.formControl.init({
email: '',
phone: '',
}, {
static: 'form-control',
success: 'valid-success',
error: 'valid-error',
});
}
handleSubmit = async () => {
const { formControl } = this.props;
if (await formControl.validate()) {
// Submit.
}
};
render() {
return (
<div className="form-group">
<Text
name="email"
placeholder="Please input your email"
delay={100} // Asynchronous validation
/>
<Message className="valid-error-message" name="email" />
<Text name="phone" />
<button onClick={this.handleSubmit}>提交</button>
</div>
);
}
}
Методы проверки можно найти в validate-framework-utils.
Компоненты формы:
Checkbox
.Radio
.Select
.Text
.Textarea
.Message
.Атрибут name
обязателен для компонентов формы, delay
— время задержки, другие параметры можно переопределить.
Также можно использовать неинкапсулированные компоненты формы, просто указав value
и onChange
:
const {
formControl: {
fields,
onFormChange,
},
} = this.props;
return (
<input
className={fields.email.className}
name="email"
type="text"
onChange={onFormChange}
value={fields.email.value}
placeholder="Please input your email"
/>
);
API:
name | type | return | setState | description |
---|---|---|---|---|
fields | Object | Коллекция полей | ||
isAllValid | Boolean | Получает глобальный статус валидации | ||
formValues | Object | Получает список значений формы | ||
init | function | this | Инициализирует значение формы и классы | |
initClassNames | function | this | false | Инициализирует классы |
onFormChange | function | true | Прослушиватель событий изменения формы | |
validate | функция | Promise => Boolean | true | Проверить все поля |
validateByNames | функция | Promise => Boolean | true | Проверить компонент по именам |
addValues | функция | this | true | Добавить одно или несколько значений |
removeValues | функция | this | true | Удалить одно или несколько значений, если нет имени, будут удалены все |
resetValues | функция | this | true | Сбросить одно или несколько значений, если нет имени, все будут инициализированы |
addSchemas | функция | this | false | Добавить одно или более правил валидации |
removeSchemas | функция | this | true | Удалить одно или более правил валидации, если нет имени, они все будут удалены |
formDidChange | функция | Обратный вызов |
Вы можете вызвать метод changeValues
, чтобы смоделировать событие изменения формы.
0.15.x
delay
из FormControl
.delay
в props
компонента формы.Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )