Form в библиотеке Ant Design — это мощный компонент для создания управляемых форм с поддержкой валидации, динамического управления состоянием полей и интеграции с другими элементами интерфейса. Он предоставляет высокоуровневый API, который упрощает работу с данными форм и их проверкой.
Компонент Form обычно используется как контейнер для полей формы. Его основной синтаксис:
import { Form, Input, Button } from 'antd';
const DemoForm = () => {
const [form] = Form.useForm();
const onFin ish = (values) => {
console.log('Received values:', values);
};
return (
<Form
form={form}
name="demo_form"
layout="vertical"
onFin ish={onFinish}
initialValues={{ username: '', password: '' }}
>
{/* Поля формы будут здесь */}
</Form>
);
};
Ключевые свойства Form:
Form.useForm(). Позволяет программно управлять значениями и
состоянием полей.horizontal (по умолчанию), vertical или
inline.Компонент Form.Item используется для создания отдельных полей и их валидации. Каждый Form.Item связан с уникальным ключом name, который соответствует имени поля в форме.
<Form.Item
label="Имя пользователя"
name="username"
rules={[{ required: true, message: 'Введите имя пользователя' }]}
>
<Input placeholder="Введите имя пользователя" />
</Form.Item>
<Form.Item
label="Пароль"
name="password"
rules={[
{ required: true, message: 'Введите пароль' },
{ min: 6, message: 'Пароль должен быть не менее 6 символов' }
]}
>
<Input.Password placeholder="Введите пароль" />
</Form.Item>
<Form.Item>
<Button type="primary" htmlType="submit">
Войти
</Button>
</Form.Item>
Основные свойства Form.Item:
form.getFieldValue и
form.setFieldsValue.Ant Design поддерживает встроенную валидацию через правила в Form.Item. Правила задаются как объекты с ключами:
Пример кастомной валидации:
<Form.Item
label="Подтверждение пароля"
name="confirm"
dependencies={['password']}
hasFeedback
rules={[
{ required: true, message: 'Подтвердите пароль' },
({ getFieldValue }) => ({
validator(_, value) {
if (!value || getFieldValue('password') === value) {
return Promise.resolve();
}
return Promise.reject(new Error('Пароли не совпадают'));
},
}),
]}
>
<Input.Password placeholder="Повторите пароль" />
</Form.Item>
Форма Ant Design предоставляет методы для программного контроля:
form.setFieldsValue({ username: 'John' }); // установить значения
form.getFieldValue('username'); // получить значение
form.resetFields(); // сброс всех полей к initialValues
form.validateFields(); // запуск валидации
Использование этих методов позволяет динамически изменять содержимое формы, реализовывать интерактивные сценарии и управлять сложными зависимостями между полями.
Дополнительно можно управлять шириной и выравниванием полей через свойства labelCol и wrapperCol:
<Form
labelCol={{ span: 6 }}
wrapperCol={{ span: 14 }}
>
Это позволяет создавать профессиональные формы с точным позиционированием элементов.
Ant Design поддерживает динамическое добавление и удаление полей через Form.List:
<Form.List name="users">
{(fields, { add, remove }) => (
<>
{fields.map(({ key, name, ...restField }) => (
<Form.Item
{...restField}
name={[name, 'first']}
rules={[{ required: true, message: 'Введите имя' }]}
>
<Input placeholder="Имя" />
</Form.Item>
))}
<Button onCl ick={() => add()}>Добавить</Button>
</>
)}
</Form.List>
Такой подход упрощает создание форм с повторяющимися блоками данных, например, списков участников или адресов.
Любой компонент Ant Design можно использовать внутри Form.Item, поддерживая управление состоянием и валидацией:
Пример с Select:
<Form.Item
name="role"
label="Роль"
rules={[{ required: true, message: 'Выберите роль' }]}
>
<Select placeholder="Выберите роль">
<Select.Option value="admin">Администратор</Select.Option>
<Select.Option value="user">Пользователь</Select.Option>
</Select>
</Form.Item>
Использование стандартных компонентов Ant Design внутри Form.Item обеспечивает консистентность интерфейса и минимизирует необходимость в кастомной логике валидации.
Эта структура Form + Form.Item формирует основу для любых форм в приложениях на React с использованием Ant Design, обеспечивая мощную систему управления данными, валидацией и стилями.