TGViewer
artalog artalog @artalog · 4.21K subscribers
Post #20 2.06K
Слоты в реакте

Я уже писал про исправление мемоизации, которое не является стандартным паттерном работы с реактом. Сегодня продолжим эту тему и поговорим о слотах.

Слот — это специальный аргумент / атрибут / проп компонента, который подразумевает передачу другого компонента, для его отрисовки ниже по дереву. Это актуальный паттерн для компонентов высшего порядка и часто встречается в любом приложении.
В реакт экосистеме ошибочно считается что любой проп может быть слотом, т.к. children это такой же проп. Проблема, которая уже описывалась в канале “Горшочек варит” (классный канал, рекомендую), заключается в том, что JSX тег отдает всегда новый иммутабельный объект, который будет ломать мемоизацию компонента контейнера.

Из моей практики очевидно, что изменение children происходит внутри компонента очень редко, практически всегда они просто перепрокидываются и вызывают избыточный ререндер, даже если остальные пропы не поменялись.

Правильные слоты прокидывают некий “портал” к передающимся чилдренам и не трогают сам рендер компонента. В этом примере можно посмотреть подобную реализацию на контексте.

Но и у реализации на контексте есть проблема с тем, как это работает под капотом - реакт проходиться по всему VDOM под провайдером контекста при каждом изменении его значения в поисках подписчиков. Это не может вызвать лишние ререндеры, но все равно провоцирует избыточную работу, которая тем больше, чем больше детей у провайдера.

Рома Дворнов делился более оптимальным и рабочим решением, но с ним реакт выкидывает варнинги в консоль, хотя я не знаю какую проблему оно может повлечь.

Мне не понятно, почему в реакте нет встроенного нормального решения для слотов, хотя о них упоминается в документации.

#perf
  • 👍 18
  • 🔥 1
More from @artalog
  1. Oct 1, 2026Для меня главный приоритет в reatom.dev уже несколько лет - универсальность. Он должен реш…
  2. Sep 30, 2026https://t.me/synaptic_garden/1370 (уж извините за частый постинг, тем более про ИИ, но важ…
  3. Sep 30, 2026Post #2011
  4. Sep 30, 2026Очень круто! Композиты сильно упрощают работу с иммутабельными данными, точнее с их equali…
  5. Sep 29, 2026Bun там с AOT экспериментирует!
  6. Sep 25, 2026Пятничная демка! Превратила загрузку сайта в музыку. Чтобы треды можно было не только виде…
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 →