Проверяет понимание разделения ответственности между UI и бизнес-логикой в React-приложениях и умение выбирать правильный уровень абстракции.
Вопрос о том, где размещать логику в React-приложении, сводится к принципу разделения ответственности. Компонент должен отвечать за то, как выглядит интерфейс и как он реагирует на действия пользователя, а не за то, как устроены правила предметной области. Если смешать всё в одном месте, компонент становится большим, его сложно тестировать и переиспользовать.
Чистая функция без зависимостей от React легко тестируется, переиспользуется в других местах (например, на сервере или в мобильном приложении) и не ломается при обновлении React. Хук же остаётся тонким адаптером: он вызывает сервис и отдаёт результат в компонент.
// domain/cart.js — чистая бизнес-логика
function calcTotal(items) {
return items.reduce((sum, i) => sum + i.price * i.qty, 0);
}
// hooks/useCart.js — адаптер для React
function useCart(items) {
return useMemo(() => calcTotal(items), [items]);
}
// Cart.jsx — только UI
function Cart({ items }) {
const total = useCart(items);
return <div>Total: {total}</div>;
}Итог: держите компоненты тонкими, хуки — как переиспользуемые адаптеры, а бизнес-логику — в независимых модулях. Такой подход упрощает тестирование, повторное использование и поддержку кода.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию