— Не создавайте функции прямо в JSX
— Используйте useCallback при передаче хендлеров в дочерние компоненты
— Особенно критично для списков и больших UI
#hotfix #react
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔7👍5🔥3😁2❤1
Пошаговое руководство по симуляции солнца, дождя, снега и грозы в интерактивном трехмерном приложении для прогноза погоды.
Автор показывает, что за красивым синтаксисом скрываются подводные камни специфичности и неожиданные баги, из-за которых старые добрые keyframes по-прежнему оказываются надёжнее.
#read_watch #react #js #ts
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥1
Иногда одна мелочь рушит весь интерфейс. Компонент внезапно сбрасывает состояние и анимации — а виноват всего один key. Раньше использовался
Math.random()
, и React каждый раз считал, что элементы новые.В итоге он пересоздавал их с нуля — с потерей состояния и лагами.
Как решить проблему:
item.id
. Теперь React спокойно обновляет только то, что реально изменилось.#hotfix #react
Please open Telegram to view this post
VIEW IN TELEGRAM
😁10🥱8❤2👍2🤔1
Вы жмёте кнопку, ждёте обновления, а в ответ — тишина. React не глючит — он просто решил подождать, пока вы нажмёте ещё раз.
— как именно React «пакует» несколько setState в один рендер
— когда batching работает, а когда — нет
— и зачем в редких случаях нужен
flushSync
, если важно обновить прямо сейчас#under_hood #react
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2🥰2
Кажется, что всё просто: список, onClick — готово. Но при сотнях элементов каждый ререндер создаёт новые функции в JSX.
React считает их изменёнными и перерисовывает даже те строки, что не менялись.
На демо — незаметно. На проде — больно.
Каждый ререндер создаёт новые колбэки → React считает пропы изменёнными → перерисовывает.
useCallback стабилизирует ссылку, и компонент больше не «дёргается» без причины.
— Если список огромный — рендерьте только видимую часть (react-window, react-virtualized).
— Если элемент сложный — выносите его в memo-компонент с передачей колбэка через пропсы.
#hotfix #react
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🥰2🔥1