Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про React: portal

Почему модальные окна обычно реализуют через порталы?

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

Короткий ответ

Модальные окна реализуют через порталы, чтобы рендерить их вне обычной DOM-иерархии. Это помогает избежать проблем с z-index, overflow и позиционированием. При этом модалка остаётся частью React-дерева. Порталы позволяют сохранить логику React и упростить стилизацию. Это стандартный и рекомендуемый подход.

Длинный ответ

Модальные окна визуально должны находиться поверх всего интерфейса, но логически — принадлежать текущему экрану.

Определение

Portal — это механизм React, который позволяет рендерить компонент в другой DOM-узел, не нарушая иерархию React-компонентов.

Основная проблема без порталов

Если рендерить модалку внутри обычного DOM-дерева:

  • она может обрезаться из-за overflow: hidden

  • возникают конфликты z-index

  • усложняется позиционирование

  • страдает доступность (focus, scroll)

Как порталы решают проблему

Портал позволяет:

  1. Рендерить модалку, например, в document.body

  2. Избежать влияния CSS-ограничений родителя

  3. Сохранить контекст, пропсы и state

Пример:

ReactDOM.createPortal(
  <Modal />,
  document.body
);

Важный момент

Хотя DOM-узел другой:

  • события всплывают корректно

  • Context продолжает работать

  • логика приложения не ломается

Вывод

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • React

    React

Ключевые слова

#portal

Подпишись на React Developer в телеграм