Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
В этом решении мы разбиваем монолитный компонент профиля на несколько независимых компонентов.
Мы выносим заголовок профиля в отдельный компонент ProfileHeader. Он принимает три props через деструктуризацию: avatarSrc (эмодзи аватара), name (имя) и role (должность). Компонент отвечает только за одну вещь - отображение верхней части профиля. Это делает код проще для понимания - достаточно посмотреть на имя компонента, чтобы понять, что он делает.
Вместо жёстко закодированных значений внутри компонента, мы передаём данные через props. Это делает ProfileHeader переиспользуемым - можно создать несколько профилей с разными данными, используя один и тот же компонент. Например, для другого пользователя достаточно передать другие props, не меняя код самого компонента.
Компонент ProfileDetails отвечает за отображение контактной информации. Он независим от ProfileHeader - можно изменить один компонент, не затрагивая другой. Например, если нужно добавить адрес в детали, изменения будут только в ProfileDetails. Кнопка "Редактировать профиль" пока не имеет функциональности, но в будущем можно добавить обработчик через props.
Главный компонент App собирает маленькие компоненты вместе. Это называется композицией - создание сложных интерфейсов из простых частей. App не знает, как именно ProfileHeader отображает аватар или имя - он просто передаёт данные и получает готовый результат. Это разделение ответственности - каждый компонент делает свою работу.
Разбитие на компоненты даёт несколько преимуществ. Код становится более читаемым - вместо одного длинного компонента со множеством div, мы видим структуру ProfileHeader + ProfileDetails. Компоненты можно переиспользовать - ProfileHeader подойдёт не только для страницы профиля, но и для карточки пользователя в списке. Легче тестировать - можно проверить каждый компонент отдельно. Проще работать в команде - один разработчик может изменять ProfileHeader, другой ProfileDetails, без конфликтов в коде.
Мы используем понятные имена для props. avatarSrc (источник аватара), name (имя), role (роль) - любой разработчик сразу поймёт, что эти props означают. Хорошие имена - это документация кода. Избегайте общих имен типа data или value - они не говорят, какие именно данные ожидаются.