Portal
The Portal component lets you render its children into a DOM node that exists outside of its own DOM hierarchy.
Portal is a utility component built around React's createPortal() API.
It gives you the functionality of createPortal() in a convenient component form.
The Portal component is used internally by the ModalUnstyled and Popper components.
Basic usage
Normally, children of a component are rendered within that component's DOM tree. But sometimes it's necessary to mount a child at a different location in the DOM.
The Portal component accepts a container prop that passes a ref to the DOM node where its children will be mounted.
The following demo shows how a <span> nested within a Portal can be appended to a node outside of its own DOM hierarchy—click Mount children to see how it behaves:
<button type="button" onClick={handleClick}>
{show ? 'Unmount children' : 'Mount children'}
</button>
<Box sx={{ p: 1, my: 1, border: '1px solid' }}>
It looks like I will render here.
{show ? (
<Portal container={container.current}>
<span>But I actually render here!</span>
</Portal>
) : null}
</Box>
<Box sx={{ p: 1, my: 1, border: '1px solid' }} ref={container} />Server-side
The Portal component cannot be used to render child elements on the server—client-side hydration is necessary.