Files
react-test/docs/data/material/components/portal/portal.md
how2ice 005cf56baf
Some checks failed
No response / noResponse (push) Has been cancelled
CI / Continuous releases (push) Has been cancelled
CI / test-dev (macos-latest) (push) Has been cancelled
CI / test-dev (ubuntu-latest) (push) Has been cancelled
CI / test-dev (windows-latest) (push) Has been cancelled
Maintenance / main (push) Has been cancelled
Scorecards supply-chain security / Scorecards analysis (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
init project
2025-12-12 14:26:25 +09:00

2.1 KiB

productId, title, components, githubLabel
productId title components githubLabel
material-ui React Portal component Portal scope: portal

Portal

The Portal component lets you render its children into a DOM node that exists outside of the Portal's own DOM hierarchy.

{{"component": "@mui/docs/ComponentLinkHeader", "design": false}}

Introduction

Portal is a utility component built around React's createPortal() API. It gives you the functionality of createPortal() in a convenient component form. It's used internally by the Modal and Popper components.

:::info According to the React docs, portals are useful when "you need the child element to visually 'break out' of its container"—for instance, modals and tooltips, which need to exist outside of the normal flow of the document. :::

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 the Portal's DOM hierarchy—click Mount children to see how it behaves:

{{"demo": "SimplePortal.js"}}

Basics

Import

import Portal from '@mui/material/Portal';

Customization

Server-side Portals

The DOM API isn't available on the server, so you need to use the container prop callback. This callback is called during a React layout effect:

<Portal container={() => document.getElementById('filter-panel')!}>
  <Child />
</Portal>

:::error The Portal component cannot be used to render child elements on the server—client-side hydration is necessary. This is because React doesn't support the createPortal() API on the server. See this GitHub issue for details. :::