TGViewer
WorkMe | Центр экспертизы WorkMe | Центр экспертизы @workme_expert · 110 subscribers
Post #222 45
Сегодня публикуем задачу от эксперта Дмитрия Ковалева (Senior Frontend Developer), которую он предлагает решить кандидатам на собеседовании👇

📋Кейс «Тяжелые списки» (финтех-сервис)

🔹Контекст:
В банковском приложении рендерится большой список операций. При изменении статуса одной транзакции (approve/reject) весь список начинает жутко лагать, а React DevTools показывает 300+ ререндеров.

{transactions.map(tx => (
<TransactionRow
key={tx.id}
transaction={tx}
onApprove={handleApprove}
/>
))}


🔹Вопросы для размышления:
● Почему при обновлении только одной транзакции перерисовываются абсолютно все строки списка?
● Как исправить проблему, не меняя архитектуру компонента?
● Когда реально стоит использовать React.memo / useMemo / useCallback? (а когда это только усложнит код?)

Подумали над решением? Тогда смотрите ответ👇

● По умолчанию при изменении стейта родителя React ререндерит все дерево вниз. Заново создаются пропсы для дочерних компонентов. Если handleApprove создается заново (новая ссылка) и/или transaction пересоздается как новый объект, React видит "пропсы изменились", значит все TransactionRow ререндерятся.
● Минимальный фикс — обернуть TransactionRow в React.memo, а handleApprove стабилизировать через useCallback. Также важно обновлять только нужный объект в массиве transactions, чтобы остальные сохранили свои ссылки.
● React.memo стоит использовать при длинных списках и тяжелых компонентах, useCallback при передаче функций вниз, а useMemo, если вычисления дорогие (фильтр/сортировка). Если компонент легкий — мемоизация лишь усложнит код.


🎯Цель данной задачи — проверить понимание причин ререндеров и умение оптимизировать React осознанно, а не "оборачивать всё подряд".

🗣Комментарий эксперта.
Главная ловушка — думать, что “React сам разберется”. Он и разбирается: видит новые ссылки — честно перерисовывает. Многие забывают, что React.memo работает только в связке со стабильными ссылками. Если вы обернули компонент в memo, но передаете в него onApprove={() => doSomething()}, вы просто тратите ресурсы на бесполезную проверку пропсов. Оптимизируйте осознанно: сначала замеряйте профилировщиком, а потом внедряйте мемоизацию.


#Задача_от_эксперта
  • 👍 6
More from @workme_expert
  1. Oct 9, 2026Новые реалии... 👨‍💻Устроился дизайнером в банк. Думал, буду рисовать графики, платежи и…
  2. Oct 8, 2026👀 ИИ написал код — кто его проверит? Правильно, тоже ИИ. CodeRabbit — AI-помощник: ищет п…
  3. Oct 6, 2026🤔 Задумывались ли вы, как посты в соцсетях, которые мы видим каждый день, влияют на наше…
  4. Oct 2, 2026🙃 Устали от плохих новостей? Понимаем. Хотели отвлечь вас разговором о работе, но темы по…
  5. Sep 30, 2026🛒Если Иван Иванов оплачивает каждый заказ в вашем тестовом магазине, однажды он наверняка…
  6. Sep 25, 2026🎬 Как увольнение главы OpenAI стало сюжетом фильма В январе 2027 года в российский прокат…
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 →