Вопрос проверяет понимание принципов чистой архитектуры и умение отделять логику приложения от представления для повышения тестируемости, переиспользования и поддержки кода.
Разделение бизнес-логики и UI-компонентов — это ключевой принцип проектирования, который повышает качество кода. Бизнес-логика содержит правила, вычисления и операции с данными, специфичные для предметной области приложения. UI-компоненты отвечают за отрисовку интерфейса и обработку пользовательского ввода. Смешивание этих слоёв приводит к "жирным" компонентам, которые сложно тестировать и поддерживать.
Вместо того чтобы помещать логику подсчёта и состояние прямо в компонент, мы выносим её в кастомный хук.
// useCounter.js — бизнес-логика
import { useState, useCallback } from 'react';
export function useCounter(initialValue = 0) {
const [count, setCount] = useState(initialValue);
const increment = useCallback(() => {
setCount(prev => prev + 1);
}, []);
const decrement = useCallback(() => {
setCount(prev => prev - 1);
}, []);
const reset = useCallback(() => {
setCount(initialValue);
}, [initialValue]);
// Возвращаем состояние и API для его изменения
return { count, increment, decrement, reset };
}
// Counter.js — "глупый" UI-компонент
import React from 'react';
import { useCounter } from './useCounter';
function Counter() {
const { count, increment, decrement, reset } = useCounter();
return (
Count: {count}
+
-
Reset
);
}
export default Counter;В этом примере хук useCounter инкапсулирует всю логику работы со счётчиком. Его можно протестировать отдельно от React. Компонент Counter становится простым и предсказуемым: он только отображает данные и вызывает переданные функции.
Такой подход критически важен в крупных приложениях, где логика сложна и часто меняется. Он применяется во всех современных фреймворках (React, Vue, Angular) и является основой таких паттернов, как Flux/Redux. Разделение позволяет командам работать параллельно: одни разрабатывают сервисы и хуки, другие — интерфейсы.
Вывод: Разделяйте бизнес-логику и UI, чтобы создавать гибкие, тестируемые и поддерживаемые приложения. Это особенно полезно при частых изменениях требований или при необходимости использовать одну логику в разных частях интерфейса (например, на вебе и в мобильном приложении).
Уровень
Рейтинг:
4
Сложность:
5
Навыки
JavaScript
React
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию