Funktionskomponente des Reaktionsportals
Eine erstklassige Methode, Kinder in einen DOM-Knoten
zu rendern, der ausserhalb der DOM-Hierarchie der Elternkomponente liegt, bieten Portale. In diesem Artikel erfahren Sie, wie Sie die funktionalen Komponenten des Portals von ReactJS verwenden.
Funktionale Komponente des React-Portals in ReactJS
Im Wesentlichen montieren wir unser App-Element über unserem Root-Element. Die Verwendung eines div
-Elements mit der id-Wurzel als primäres DOM-Element ist praktisch Standard geworden.
Jede React-Komponente in unserer Anwendung ist unter dem Element root
zu finden, das sich innerhalb eines Satzes befindet, wenn Sie sich den DOM-Baum
des Browsers ansehen. Trotzdem erlauben uns React Portals
, diesen DOM-Baum
zu verlassen und eine Komponente auf einen DOM-Knoten
zu rendern, der nicht unter diesem root
-Element liegt.
Dies verstößt gegen eine Eltern-Kind
-Hierarchie und erfordert, dass eine Komponente als neues Element präsentiert wird.
Syntax:
ReactDOM.createPortal(child, container)
- Das erste Argument ist ein
Kind
, das alles Renderbare sein kann, wie z. B. ein Element, ein String oder ein Fragment (Kind). - Der
container
ist ein DOM-Element und das zweite Argument.
Die untergeordneten
Komponenten müssen den übergeordneten Container visuell verlassen. Unten wird einer der häufigsten Anwendungsfälle des Portals gezeigt.
- Dialogfelder mit Modalen
- Hovercards
- Schwebende Menüs
- QuickInfos
- Lader
Beachten Sie bei der Verwendung von Reaktionsportalen Folgendes. Wenn Sie niemanden kennenlernen, sind diese Tendenzen nicht sofort erkennbar.
- Unabhängig davon, wo sich der
Portal-Knoten
im DOM befindet, funktioniert das Event-Bubbling wie vorgesehen, indem es Events an die Vorgänger des React-Baums weiterleitet. - React steuert immer noch den Lebenszyklus von untergeordneten Elementen, wenn sie über Portale gerendert werden.
- Der React-Komponentenbaum wird vom Portal nicht beeinflusst, das nur die HTML-DOM-Struktur ändert.
- Bei der Verwendung von Portalen müssen Sie als Einhängepunkt für die Portalkomponente ein
HTML DOM element
angeben.
Lassen Sie uns das folgende Beispiel verwenden, um die erwähnte Idee zu verstehen.
Code:
const PortalModal = ({message, isModalOpen, onClose}) => {
if (!isModalOpen) return null;
return ReactDOM.createPortal(
<div className='modal'>
<p>{message}</p>
<button onClick={onClose}>X</button>
</div>
,document.body);
}
function Component() {
const [modalOpen, setModalOpen] = useState(false)
return (
<div>
<button onClick={() => setModalOpen(true)}>Open Modal</button>
<PortalModal
message = 'Hello DelftStack Readers!'
isModalOpen={modalOpen}
onClose={
() => setModalOpen(false)}
/>
</div>
)
}
Wir haben das Portal für das Modal im obigen Beispiel erstellt. Das Modal öffnet sich und erscheint außerhalb des root
-Elements, sobald der Benutzer auf die Schaltfläche klickt.
Die Dimensionen dieses Modals würden von den übergeordneten Komponenten nicht geerbt oder geändert, da es außerhalb der Stammhierarchie gerendert wird.
Ausgang:
Shraddha is a JavaScript nerd that utilises it for everything from experimenting to assisting individuals and businesses with day-to-day operations and business growth. She is a writer, chef, and computer programmer. As a senior MEAN/MERN stack developer and project manager with more than 4 years of experience in this sector, she now handles multiple projects. She has been producing technical writing for at least a year and a half. She enjoys coming up with fresh, innovative ideas.
LinkedIn