Фрагменты (Fragments) в Inferno позволяют группировать
несколько элементов без необходимости создавать лишний DOM-узел. Это
особенно полезно при возвращении нескольких компонентов из функции
рендеринга, когда обертка в <div> или другой элемент
создаст лишнюю структуру в DOM.
import { Fragment } from 'inferno';
function Example() {
return (
<Fragment>
<h1>Заголовок</h1>
<p>Некоторый текст</p>
</Fragment>
);
}
<></>
— сокращённая форма записи фрагментов поддерживается JSX.function List({ items }) {
return (
<>
{items.map(item => (
<Fragment key={item.id}>
<h2>{item.title}</h2>
<p>{item.description}</p>
</Fragment>
))}
</>
);
}
Использование фрагментов позволяет избежать лишнего вложенного DOM, что положительно сказывается на производительности, особенно при больших списках компонентов.
Порталы (Portals) предназначены для рендеринга
компонентов в DOM-узлах, находящихся за пределами основного корня
приложения. Это полезно для модальных окон, всплывающих подсказок,
уведомлений, когда визуальное расположение в дереве DOM должно
отличаться от логической структуры компонентов.
import { render } from 'inferno';
import { createPortal } from 'inferno-create-portal';
function Modal({ children }) {
const modalRoot = document.getElementById('modal-root');
return createPortal(
<div className="modal">
{children}
</div>,
modalRoot
);
}
createPortal.function App() {
return (
<div>
<h1>Главное приложение</h1>
<Modal>
<p>Это модальное окно</p>
</Modal>
</div>
);
}
В данном примере <Modal> будет отображаться в
элементе #modal-root, но событие клика внутри него будет
восприниматься как часть дерева компонента App.
| Параметр | Фрагменты | Порталы |
|---|---|---|
| DOM-узел | Не создают | Рендерят в указанном узле |
| Использование | Группировка элементов | Модальные окна, всплывающие окна |
| Контекст | Наследует контекст | Сохраняет контекст родителя |
| Производительность | Минимальное влияние | Может быть дороже рендера |
Фрагменты идеально подходят для чистой структуры JSX без лишних элементов, в то время как порталы обеспечивают гибкость визуального отображения компонентов.