Portale Man kann es als Slot bezeichnen, aber anders als der Slot in Vue bezieht es sich auf das Rendern eines React-Elements in einen angegebenen Container (echtes DOM). Beispielsweise wird die Modal-Komponente normalerweise standardmäßig direkt als untergeordnetes Element der realen Struktur des Textkörpers gerendert, sodass wir ReactDOM.createPortal(ReactElement, RealDOM-Container) verwenden können, um ein React-Element zu erstellen. Beispielcode: React von „react“ importieren ReactDOM von „react-dom“ importieren Modal aus „./components/Modal“ importieren const PortalModal = ReactDOM.createPortal(<Modal />, document.body) exportiere Standardfunktion App() { zurückgeben <div Klassenname="App-Container"> <PortalModal /> </div> } Wir können in der Browserkonsole sehen, dass die echte Modalkomponente tatsächlich als direktes untergeordnetes Element des Hauptteils gerendert wird. Über die React-Entwicklertools können wir jedoch sehen, dass sich die Modalkomponente in der virtuellen DOM-Baumstruktur immer noch unter der App-Komponente befindet, im Div mit dem Klassennamen App-Container. Daher können wir den Schluss ziehen, dass die virtuelle DOM-Baumstruktur der React-Komponente möglicherweise nicht mit der realen DOM-Baumstruktur übereinstimmt. Daher müssen wir auf Event-Bubbling achten
Fehlergrenzenbehandlung Wenn beim Rendern einer Komponente ein Fehler auftritt, wird standardmäßig der gesamte Komponentenbaum ausgehängt. Fehlergrenze: Eine Komponente, die Fehler erfasst, die beim Rendern in untergeordneten Komponenten auftreten, und die verhindern kann, dass sich Fehler auf übergeordnete Komponenten ausbreiten. Lassen Sie eine Komponente Fehler abfangen (Klassenkomponente): Verwenden Sie die statische Methode static getDerivedStateFromError, die ausgelöst wird, wenn eine Unterkomponente einen Fehler rendert
importiere React, {PureComponent} von 'react' exportiere Standardklasse ErrorBoundary erweitert PureComponent { Zustand = { isError: false } statisch getDerivedStateFromError(Fehler) { console.log('Rendering-Fehler: ', Fehler) zurückkehren { isError: true } } rendern() { wenn (dies.istFehler) { return <span>Etwas stimmt nicht...</span> } gib diese.Eigenschaften.Kinder zurück } } Verwenden der Funktion componentDidCatch(error, info)
importiere React, {PureComponent} von 'react' exportiere Standardklasse ErrorBoundary erweitert PureComponent { Zustand = { isError: false } componentDidCatch(Fehler, Info) { // Info ist die Fehlerzusammenfassung console.log('Rendering-Fehler: ', Fehler) console.log('Rendering-Informationen: ', Informationen) dies.setState({ isError: true }) } rendern() { wenn (dies.istFehler) { return <span>Etwas stimmt nicht...</span> } gib diese.Eigenschaften.Kinder zurück } } Was passiert, wenn Fehlergrenzen nicht verwendet werden?Ab React 16 führt jeder Fehler, der nicht von einer Fehlergrenze erfasst wird, dazu, dass der gesamte React-Komponentenbaum ausgehängt wird. Die Erfahrung hat uns gezeigt, dass es besser ist, die fehlerhafte Benutzeroberfläche vollständig zu entfernen, als sie beizubehalten. Wenn dem Benutzer beispielsweise bei einem Produkt wie Messenger eine ungewöhnliche Benutzeroberfläche angezeigt wird, kann dies dazu führen, dass er die falsche Nachricht an jemand anderen sendet. Durch das Hinzufügen von Fehlergrenzen können Sie für eine bessere Benutzererfahrung sorgen, wenn in Ihrer Anwendung Ausnahmen auftreten. Beispielsweise umschließt Facebook Messenger die Seitenleiste, das Nachrichtenfeld, den Chatverlauf und das Nachrichteneingabefeld in separate Fehlergrenzen. Wenn einige der UI-Komponenten abstürzen, sind die übrigen weiterhin interaktiv. NotizEinige Fehler werden von der Fehlerbegrenzungskomponente nicht erfasst Fehler in eigenen Komponenten Asynchrone Fehler (wie etwa in setTimeout ausgelöste Fehler) importiere React, {PureComponent} von 'react' // ErrorBoundary.jsx exportiere Standardklasse ErrorBoundary erweitert PureComponent { Zustand = { isError: false } /* Diese Funktion wird nicht ausgeführt */ statisch getDerivedStateFromError(Fehler) { console.log('Rendering-Fehler: ', Fehler) zurückkehren { isError: true } } rendern() { wenn (dies.istFehler) { return <span>Etwas stimmt nicht...</span> } gib diese.Eigenschaften.Kinder zurück } } // Comp.jsx Comp-Komponente exportieren Standardfunktion Comp() { setzeTimeout(() => { neuen Fehler werfen('setTimeout-Fehler') }, 1000) return <div>Komp.</div> } // App.jsx verwendet die Export-Standardfunktion App() { Rückkehr <> <Fehlergrenze> <Komp /> </Fehlergrenze> </> } In Ereignissen ausgelöste Fehler Das heißt: Behandeln Sie nur synchrone Fehler beim Rendern von untergeordneten Komponenten Dies ist das Ende dieses Artikels über die Implementierung von Portalen und die Fehlergrenzbehandlung in React. Weitere relevante Inhalte zu React-Portalen und zur Fehlergrenzbehandlung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
>>: Detaillierte Erklärung zu sinnvollen Einstellungen des MySQL sql_mode
Vorwort MySQL ist ein schnelles, leistungsstarkes...
Ziel dieses Artikels ist es, die Grundfunktionen ...
Bei der Bedienung und Konfiguration von Linux wir...
Inhaltsverzeichnis Vorwort Einführung JavaScript ...
<br />Die Lösungsschritte sind wie folgt: St...
In diesem Artikelbeispiel wird der spezifische Co...
1. Schreiben Sie das Shell-Skript crontab.sh #!/b...
Problembeschreibung: Ich habe einen Desktop-Compu...
Inhaltsverzeichnis 1. Grundlegende Umgebungskonfi...
Vorwort: Ich habe Win10 neu installiert und gleic...
Die Grafikkarte meines Computers ist eine Nvidia-...
<br />Der Inhalt wurde aus dem Internet repr...
Inhaltsverzeichnis 1. Docker-Installation auf dem...
Founder Type Library ist eine Schriftbibliothek, ...
Bei jeder Anmeldung am Testserver ist grundsätzli...