---
sidebar_position: 9
---
# Render portal
В контексте библиотеки **React**, **Portal (портал)** — это механизм, который позволяет рендерить дочерние элементы
Использование порталов (**Portals**) в React позволяет рендерить элементы вне основного DOM-дерева, сохраняя при этом их
логическую связь с React-компонентами. Это особенно полезно для модальных окон, всплывающих подсказок, уведомлений и
других элементов, которые должны отображаться поверх основного интерфейса.
## Как использовать порталы в React
1. **Создайте целевой DOM-элемент:** \
В вашем HTML-файле создайте элемент, в который будет рендериться содержимое портала. Обычно это делается в
`public/index.html` (если вы используете Create React App).
```html
```
2. **Используйте ReactDOM.createPortal:**
В React-компоненте используйте метод `ReactDOM.createPortal`, чтобы рендерить содержимое в целевой DOM-элемент.
3. **Пример использования портала:**
```jsx
import React from 'react';
import ReactDOM from 'react-dom';
// Компонент модального окна
function Modal({children, onClose}) {
return ReactDOM.createPortal(
{children}
,
document.getElementById('modal-root') // Целевой DOM-элемент
);
}
// Основной компонент
function App() {
const [isModalOpen, setIsModalOpen] = React.useState(false);
return (
Пример использования портала
{isModalOpen && (
setIsModalOpen(false)}>
Это модальное окно, отрендеренное через портал!
)}
);
}
export default App;
```
## Объяснение кода:
1. **Целевой DOM-элемент:**
- В `public/index.html` создан элемент с `id="modal-root"`, в который будет рендериться модальное окно.
2. **Компонент `Modal`:**
- Использует `ReactDOM.createPortal`, чтобы рендерить содержимое модального окна в modal-root.
- Первый аргумент `createPortal` — это JSX, который нужно отрендерить.
- Второй аргумент — это DOM-элемент, в который будет вставлено содержимое.
3. **Компонент `App`:**
- Управляет состоянием модального окна (`isModalOpen`).
- При нажатии на кнопку "Открыть модальное окно" состояние изменяется, и модальное окно отображается через портал.
## Преимущества использования порталов:
1. Логическая связь:
- Элементы, рендерящиеся через портал, остаются частью React-дерева. Это означает, что они могут получать пропсы,
контекст и участвовать в жизненном цикле компонентов.
2. Визуальное отделение:
- Позволяет отображать элементы вне основного DOM-дерева, что полезно для модальных окон, всплывающих подсказок и
т.д.
3. Упрощение стилей:
- Позволяет избежать проблем с z-index и наложением элементов.
## Когда использовать порталы?
- Модальные окна.
- Всплывающие подсказки (tooltips).
- Уведомления.
- Любые элементы, которые должны отображаться поверх основного интерфейса.
🚀 **_Источник: DeepSeek_**