TGViewer
Frontend Советы Frontend Советы @frontend_sovet · 2.04K subscribers
Post #409 673
Почему ваши UI-компоненты растут как снежный ком и как этого избежать

Когда один компонент делает всё: и рисует интерфейс, и тянет данные, и валидирует форму, и ещё 20 мелких задач. Такой код трудно поддерживать, тестировать и переиспользовать.


🧩 Как понять, что компонент уже перерос нормы?

- У него больше 200–250 строк.
- Он содержит и бизнес-логику, и сетевые запросы, и рендер - всё вперемешку.
- В нём много useEffect, часть из которых «о чём-то своём».
- Вы боитесь открыть файл, потому что там хаос.


🛠️ Что делать, чтобы этого избежать?

1. Выносите бизнес-логику в кастомные хуки

Например, вместо:


function UsersList() {
const [users, setUsers] = useState([]);

useEffect(() => {
fetch('/api/users').then(r => r.json()).then(setUsers);
}, []);

return users.map(u => <UserCard key={u.id} user={u} />);
}


Сделайте:


function useUsers() {
const [users, setUsers] = useState([]);

useEffect(() => {
fetch('/api/users').then(r => r.json()).then(setUsers);
}, []);

return users;
}

function UsersList() {
const users = useUsers();
return users.map(u => <UserCard key={u.id} user={u} />);
}


UI остаётся чистым.


2. Разделяйте компонент на контейнер и представление

- Контейнер — получает данные и передаёт вниз.
- Представление — только отображает.


3. Удаляйте «лишние» обязанности

Если компонент отвечает больше чем за одну задачу, значит это уже два компонента.


4. Не бойтесь мелких файлов

Один компонент = один файл = одна ответственность.

👉@frontend_sovet
  • 👍 1
More from @frontend_sovet
  1. Jun 14, 2026Совет по CSS 💡 Знаете ли вы о свойстве shape-outside в CSS? Demo https://www.codewithshri…
  2. Apr 18, 2026🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.r…
  3. Apr 18, 2026⚛️ Прощай, e.preventDefault(): Нативные формы в React Управление формами в React всегда тр…
  4. Mar 21, 2026🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.r…
  5. Mar 19, 2026CSS совет 💡 Проявите креативность с текстом всего с 3 строками CSS-кода ✨ 👉@frontend_sov…
  6. Jan 13, 2026⚛️ Как я перестал бояться useEffect и упростил код Сегодня разберём проблему, которую я по…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →