TGViewer
Дивовижний світ веброзробки Дивовижний світ веброзробки @babichdev · 2.91K subscribers
Post #232 2.49K
#мислення_розробника

useLess

Спробую коротенько викласти основні думки моєї доповіді на React+ Fwdays'25. Відразу попереджаю, що до самих хуків доберемся далеко не відразу.

Отже, найперша теза — на мою особисту думку, архітектура React безбожно застаріла. І саме цим пояснюється постійне намагання вигадати чергові чудодійні покращення та магічні "оптимізації".

Теза друга — якщо ваш застосунок повільно працює, то у переважній більшості випадків React тут ні до чого, а проблема знаходиться по ту сторону монітора.

Думка третя — без розуміння недоліків інструменту неможливо ефективно ним користуватися. Якщо вашим першим рішенням буде втулити черговий useMemo — для мене це очевидна ознака, що ви взагалі не знаєте, як працює React, і які у нього є проблеми.

Теза четверта: кожен хук — точка доданої складності. React мусить в неочевидний для нас спосіб відслідковувати порядок їх виклику, робити додаткові перевірки, витрачати ресурси на перевірку залежностей і все це тримати в доволі кучерявій структурі даних з доволі кучерявою логікою відтворення.

Пʼята думка — завжди треба ставити під сумнів сферу відповідальности UI-компонентів. Чи мають тягнутися дані саме тут? Чи потрібне це обчислення саме тут? І так далі. Потрапивши під вплив магічного мислення "хуки оптимізують", дуже легко втратити здоровий ґлузд і перетворити маленький компонент на звалище.

І нарешті, остання теза — use Less. Менше хуків, більше логіки. Треба писати на JS, а не на хуках, тобто змінити напрямок мислення. Бо в першу чергу наша задача зробити так, аби воно працювало, а про всілякі плюшечки й рюшечки варто думати в кінці.

Звичайно ж, це не панацея. Що спрацює для одного випадку, зашкодить в іншому. В одному місці можна викинути useMemo, в іншому без нього ніяк.

Головний принцип, за яким завжди мають прийматися архітектурні рішення — IT DEPENDS. Тому кожен випадок треба розглядати окремо.

Але центральною думкою завжди має бути — "Нашо воно тут?". Якщо ви не можете виправдати useCallback чи useEffect — їм тут не місце.

Наостанок ще побіжно згадаю про React Compiler, що вийшов буквально кілька днів тому. Так от, друзі, радіти тому, що от нарешті можна викинути useMemo чи useCallback, ще зарано.

RC вводить примусове кешування. До того ж доволі прямолінійне. Це один з моментів, які найперше кинулися мені в очі. Однозначно вилізуть моменти, коли що він, що useMemo будуть заважати.

А найбільшою проблемою його, на мою особисту думку, є те, що RC вводить ще один додатковий, до того ж прихований, рівень складності.

Він буде покривати багато моментів, але із ним вам треба бути ще обережнішими, бо на додачу до жонглювання хуками доведеться ще й тримати в голові, чи увімкнутий тут Compiler, чи ні.

А найсумніше в усій цій історії те, що найбільша проблема так і не буде ніколи вирішена. Я говорю про сам React, усі зусилля з оптимізації якого зводяться до того, аби хоч якось обліпити подорожниками й пластирями його підхід з віртуальним DOM. Це було проривне рішення для 2013 року, але у 2025 році це вже просте латання дірок.

Якщо ж спробувати ще більше скоротити зміст доповіді, то вийде щось на кшталт:

Спочатку думайТЕ, а вже потім пишіТЕ.

Гарного усім початку робочого тижня! Якщо цікаво більше подискутувати про те, чому React — гімно (як і все інше), можете дати мені про це знати вподобайкою та донатом на детектори дронів для 115 бригади.

Подякував!

@babichdev
  • ❤ 70
  • 👍 15
  • 🔥 11
  • 🤔 1
More from @babichdev
  1. Sep 30, 2026Товариство, запрошую вас цієї суботи, 3 жовтня, на Fwdays Tech Summit — онлайн конференцію…
  2. Sep 28, 2026#збір_на_авто_для_21 Товариство, почнімо тиждень з доброго діла. Я би дуже хотів, аби ми ц…
  3. Sep 27, 2026Знайшов своє старезне резюме. Аж пустив скупу сльозу за тими часами, коли навіть з таким м…
  4. Sep 25, 2026Днями на редіті побачив допис, в якому автор питав, чому його лічильник часу на сторінці з…
  5. Sep 23, 2026Який ШІ найкращий для навчання? Відповідь проста — той, з яким ви чогось навчились. ШІ це…
  6. Sep 18, 2026Оце я, канєшна, провтикав. Конфа завтра, 19 вересня. Ще встигаєте взяти квиточок.
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 →