Вопрос проверяет умение разбивать сложные React-компоненты на более мелкие и переиспользуемые части, что необходимо для поддержания чистоты кода и упрощения тестирования.
Декомпозиция компонентов — это фундаментальный навык в разработке на React, который превращает монолитные, сложные для понимания компоненты в дерево маленьких, управляемых и часто переиспользуемых частей. Основная цель — повысить читаемость, упростить тестирование и облегчить совместную работу в команде.
Рассмотрим монолитный компонент пользовательского профиля, который загружает данные и отображает их.
// Плохо: один большой компонент
function UserProfile() {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetchUser().then(data => {
setUser(data);
setLoading(false);
});
}, []);
if (loading) return Loading...;
return (
{user.name}
Email: {user.email}
alert('Edited!')}>Edit Profile
);
}Теперь декомпозируем его:
// 1. Кастомный хук для логики загрузки данных
function useUser(userId) {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetchUser(userId).then(data => {
setUser(data);
setLoading(false);
});
}, [userId]);
return { user, loading };
}
// 2. Презентационный компонент для отображения профиля
function UserProfileView({ user, onEdit }) {
return (
{user.name}
Email: {user.email}
Edit Profile
);
}
// 3. Переиспользуемый компонент загрузки
function Loader() {
return Loading...;
}
// 4. Основной компонент-контейнер, который всё связывает
function UserProfile({ userId }) {
const { user, loading } = useUser(userId);
const handleEdit = () => alert('Edited!');
if (loading) return ;
return ;
}В результате мы получили несколько независимых модулей: хук для данных, чистый компонент отображения, компонент-индикатор и главный компонент, который их координирует. Каждую часть теперь можно тестировать и изменять отдельно.
Вывод: Декомпозицию стоит применять всегда, когда компонент становится слишком большим или выполняет несколько несвязанных задач. Это особенно полезно в больших приложениях для поддержания архитектурной чистоты и упрощения рефакторинга.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
JavaScript
React
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию