Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
В этом решении мы разбиваем форму регистрации на независимые компоненты для улучшения структуры кода.
Компонент FormGroup инкапсулирует пару "метка + поле ввода". Мы выделили его отдельно, потому что в форме четыре одинаковых по структуре поля - они отличаются только текстами и типами. Вместо копирования разметки четыре раза, мы создаём переиспользуемый компонент. Это упрощает изменения - если нужно добавить иконку или обёртку, меняем код в одном месте.
RegisterLink - это маленький компонент для одной строки текста со ссылкой. Можно было оставить его прямо в форме, но вынесение даже таких мелких элементов делает код формы чище. В будущем эта ссылка может стать сложнее - добавится роутинг через React Router вместо обычного <a>, или появится логика определения, показывать ли эту ссылку.
RegistrationForm собирает все поля формы вместе. Вместо множества <div className="form-group"> с похожей разметкой, мы видим четыре чистых вызова <FormGroup> с разными параметрами. Структура формы читается как декларативное описание - "поле имени, поле email, поле пароля, подтверждение, кнопка, ссылка". Компонент пока не содержит логики (состояния, валидации), только структуру.
Компонент App максимально простой - контейнер с заголовком и формой. Вся сложность формы скрыта внутри RegistrationForm. Если позже появятся другие формы (вход, восстановление пароля), App будет переключаться между ними, не содержа деталей каждой формы.
Атрибут type меняет поведение поля - "email" даёт специальную клавиатуру на мобильных, "password" скрывает символы. FormGroup не знает про эти особенности - он просто передаёт type в <input>. Это делает компонент универсальным для любых типов полей.
Обратите внимание, что в этом решении форма не контролируется React - нет value и onChange на полях. Это статическая декомпозиция - мы разбили структуру на компоненты, но не добавили функциональность. Форма отображается, но не обрабатывает ввод пользователя. Для полноценной работы нужно добавить состояние, обработчики событий и валидацию.