Heim > Artikel > Web-Frontend > So kapseln Sie wiederverwendbare Portalkomponenten mithilfe von React
Einer der Kerne von React sind Komponenten. Der folgende Artikel führt Sie hauptsächlich in die relevanten Informationen zum React-Tutorial zum Kapseln einer wiederverwendbaren Portalkomponente ein. Der Artikel stellt es detailliert anhand von Beispielcode vor es, lasst uns unten gemeinsam lernen.
Portal-Einführung
Wir brauchen also eine allgemeine Komponente, die die folgenden Dinge tut:
Kann deklarativ in einer Komponente geschrieben werden
wird nicht dort gerendert, wo es deklariert ist
Unterstützt Übergangsanimationen
Dann können Komponenten wie Modal, Tooltip, Benachrichtigung usw. auf dieser Komponente basieren. Wir nennen diese Komponente Portal.
Wenn Sie React16+ verwenden, müssen Sie zumindest etwas über Portal wissen oder es beherrschen.
Portal kann ein DOM außerhalb Ihres Stammelements erstellen.
1. Normalerweise hat Ihre Website nur einen Stamm
<body> <p id="root"></p> </body>
2. Nach der Verwendung von Portal kann es wie folgt aussehen:
<body> <p id="root"></p> <p id="portal"></p> </body>
Portal-Komponentenkapselung hoher Ordnung
Die Demo von Portal ist auf der offiziellen Website zu sehen. Unser Ziel ist es, sie in eine Kapselung zu kapseln wiederverwendbare Komponenten.
Ziel
Es ist nicht erforderlich, HTML manuell unter dem Text hinzuzufügen, sondern erstellen Sie es selbst über Komponenten.
<CreatePortal id, //可以传入id className, //可以传入className style //可以传入style > 此处插入p或者react组件 </CreatePortal>
Implementierungsplan
1. Erstellen Sie eine createPortal-Funktion, die eine Portal-Komponente zurückgibt
function createPortal() { } export default createPortal()
2. Portal-Komponente erstellen
import React from 'react' import ReactDOM from 'react-dom' import PropTypes from 'prop-types' function createPortal() { class Portal extends React.Component{ } return Portal } export default createPortal()
3. Implementieren Sie die Renderfunktion und verwenden Sie createPortal, um das Portal zu erstellen.
render() { return ReactDOM.createPortal( this.props.children, this.el ) }
4. Implementierung der Funktion „componentDidMount“, dom zum Körper hinzufügen
componentDidMount() { document.body.appendChild(this.el); }
5. Implementierung der Funktion „componentWillUnmount“, klare DOM-Struktur
componentWillUnmount() { document.body.removeChild(this.el) }
6. Implementierung von Requisiten, einschließlich id, className, style
constructor(props) { super(props) this.el = document.createElement('p') if (!!props) { this.el.id = props.id || false if (props.className) this.el.className = props.className if (props.style) { Object.keys(props.style).map((v) => { this.el.style[v] = props.style[v] }) } document.body.appendChild(this.el) } }
7, vollständiger Code
import React from 'react' import ReactDOM from 'react-dom' import PropTypes from 'prop-types' function createPortal() { class Portal extends React.Component{ constructor(props) { super(props) this.el = document.createElement('p') if (!!props) { this.el.id = props.id || false if (props.className) this.el.className = props.className if (props.style) { Object.keys(props.style).map((v) => { this.el.style[v] = props.style[v] }) } document.body.appendChild(this.el) } } componentDidMount() { document.body.appendChild(this.el); } componentWillUnmount() { document.body.removeChild(this.el) } render() { return ReactDOM.createPortal( this.props.children, this.el ) } } Portal.propTypes = { style: PropTypes.object } return Portal } export default createPortal()
Das Obige habe ich für alle zusammengestellt. Ich hoffe, dass es in Zukunft für alle hilfreich sein wird.
Verwandte Artikel:
Detaillierte Einführung in das chinesische Dokument von vuex
So lösen Sie das Problem des modulübergreifenden Router-Sprungsproblems
So generieren Sie eine Dropdown-Liste mit reinem JS
Das obige ist der detaillierte Inhalt vonSo kapseln Sie wiederverwendbare Portalkomponenten mithilfe von React. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!