основное введение
-
Хотя у реакции нет встроенной логики проверки формы, мы можем использовать компоненты формы в библиотеке компонентов реакции AntDesign.
Form
для достижения этого требования. -
В частности, компонент формы в AntDesign
Form
с полями формыForm.Item
(контейнер для упаковки произвольных элементов управления вводом) Используйте с:- существует
Form.Item
Установите правила проверки в форме при отправке формы или изменении ввода формы, выполнивthis.props.form.validateFields()
Для реализации проверки значения формы. - существует
Form.Item
помещен вgetFieldDecorator
Зарегистрированные элементы управления формы (дочерние элементы) для реализации двусторонней привязки между элементами управления формы и формами, а также для сбора значений формы.
- существует
-
использовать
Form
Ключом к встроенной функции автоматического сбора и проверки данных является использованиеForm.create()
Компоненты упаковки (портал 👉Официальная документация AntDesign). -
Form.create()
Это функция более высокого порядка, которая возвращает новый реагирующий компонент с функциями регистрации, сбора и проверки, передавая реагирующий компонент. Он используется следующим образом:
class CustomizedForm extends React.Component {}
CustomizedForm = Form.create({})(CustomizedForm);
export default CustomizedForm;
- через
Form.create()
Упакованные компоненты поставляются с собственнымиthis.props.form
свойство, которое предоставляет ряд API для работы с данными, как описано вышеgetFieldDecorator
Метод используется для двусторонней привязки к форме. После прохождения компонентаgetFieldDecorator
, то значение компонента будет полностью определятьсяForm
перенимать. - Мы знаем, что есть два способа обновления компонентов: 1. Обновляется родительский компонент 2. Меняется его собственное состояние.
- использовать
Form.create()
Цель обертывания компонентов — обновить обернутый компонент с помощью первого метода:- однажды
getFieldDecorator
Триггеры декоративных компонентовonChange事件
, это инициирует обновление родительского компонента (forceUpdate), тем самым вызывая обновление упакованного компонента. - упомянутый выше
Form.create({})(CustomizedForm)
,CustomizedForm
Это то, что мы называем упакованным компонентом.
- однажды
- Далее будет представлено
this.props.form
Несколько API и методов использования, предоставляемых ресурсом, остальные API можно посмотреть в документации (портал 👉Официальная документация AntDesign).
API, предоставляемый свойством this.props.form
getFieldDecorator
-
getFieldDecorator
Цель метода — зарегистрировать собираемые данные в экземпляре и синхронизировать зарегистрированное значение сgetFieldDecorator
на оформленном элементе управления формой, поэтому элемент управления больше не может пройтиvalue
илиdefaultValue
назначение, его состояние будет определятьсяgetFieldDecorator
Управляемый, можно использовать настройки значений по умолчаниюgetFieldDecorator
внутреннийinitialValue
. Он используется следующим образом:
// 语法:getFieldDecorator(id, options)
<Form.Item {...layout} label="题目" extra={titleExtra}>
{getFieldDecorator('name', {
rules: [
{ required: true, message: '记得填写题目' },
{ whitespace: true, message: '记得填写题目' },
],
initialValue: name, // 默认值设置
})(<Input allowClear={true}/>)}
</Form.Item>
getFieldValue
-
getFieldValue
Цель метода — получить значение элемента управления вводом. Способ применения следующий:
let options = this.props.form.getFieldValue('name'); // 使用getFieldDecorator方法修饰的id为'name'的表单控件
setFieldsValue
-
setFieldsValue
метод используется для динамической установки значения набора элементов управления вводом (⚠️ Примечание: неcomponentWillReceiveProps
используется внутри, иначе это приведет к бесконечному циклу). Способ применения следующий:
// 设置使用getFieldDecorator方法修饰的id为'name'的表单控件的值
this.props.form.setFieldsValue({ name: undefined });
validateFields
-
validateFields
Способ используется для проверки и получения набора значений и ошибок в наборе полей ввода. Метод выглядит следующим образом (если параметр поля отображения пустым, все компоненты):
/*
类型:
(
[fieldNames: string[]],
[options: object],
callback(errors, values)
) => void
*/
const { form: { validateFields } } = this.props;
validateFields((errors, values) => {
// ...
});
validateFields(['field1', 'field2'], (errors, values) => {
// ...
});
validateFields(['field1', 'field2'], options, (errors, values) => {
// ...
});
// 通过 validateFields 方法验证表单是否完成填写,通过便提交添加操作。
handleOk = () => {
const { dispatch, form: { validateFields } } = this.props;
validateFields((err, values) => {
if (!err) {
dispatch({
type: 'cards/addOne',
payload: values,
});
// 重置 `visible` 属性为 false 以关闭对话框
this.setState({ visible: false });
}
});
}
Проверка ограничения формата
- В AntDesign есть много функций форм, среди них проверка формата ввода формы осуществляется установкой
getFieldDecorator(id, options)
Параметры правила проверки, переданные в методoptions.rules
Для этого ниже приведен список нескольких проверок формата ввода формы, обычно используемых в AntDesign.
Поле ввода не может быть пустым пределом
- Пример кода:
{getFieldDecorator('name', {
rules: [{
required: true,
message: '名称不能为空',
}],
})(<Input placeholder="请输入名称" />)}
Максимальное количество символов в поле ввода
- Ограничение диапазона длины символов:
{getFieldDecorator('password', {
rules: [{
required: true,
message: '密码不能为空',
}, {
min:4,
message: '密码不能少于4个字符',
}, {
max:6,
message: '密码不能大于6个字符',
}],
})(<Input placeholder="请输入密码" type="password"/>)}
- Ограничение длины символа:
{getFieldDecorator('nickname', {
rules: [{
required: true,
message: '昵称不能为空',
}, {
len: 4,
message: '长度需4个字符',
}],
})(<Input placeholder="请输入昵称" />)}
таможенный чек
- Атрибут validator настраивает проверку и должен возвращать обратный вызов:
{getFieldDecorator('passwordcomfire', {
rules: [{
required: true,
message: '请再次输入密码',
}, {
validator: passwordValidator
}],
})(<Input placeholder="请输入密码" type="password"/>)}
// 密码验证
const passwordValidator = (rule, value, callback) => {
const { getFieldValue } = form;
if (value && value !== getFieldValue('password')) {
callback('两次输入不一致!')
}
// 必须总是返回一个 callback,否则 validateFields 无法响应
callback();
}
ошибка пробела
- Если во входных данных будет только один пробел, будет сообщено об ошибке:
{getFieldDecorator('nickname', {
rules: [{
whitespace: true,
message: '不能输入空格',
} ],
})(<Input placeholder="请输入昵称" />)}
регулярная проверка шаблона
- Если ввод не является числом, это вызовет ошибку:
{getFieldDecorator('age', {
rules: [{
message:'只能输入数字',
pattern: /^[0-9]+$/
}],
})(<Input placeholder="请输入数字" />)}
- Выше приведено введение полного текста.Если у вас есть какие-либо вопросы, пожалуйста, оставьте сообщение.