import { Component } from "react"; import Icon from "./Icon"; /** * Fängt Fehler beim Rendern ab. * * Ohne so eine Grenze hängt React den kompletten Baum aus, sobald irgendwo eine * Ausnahme fliegt – die Seite wird schlagartig weiß und nur ein Neuladen hilft. * Man sieht dann NICHT, was passiert ist, und kann es folglich auch nicht * melden. Genau das war hier das Problem. * * Die Grenze zeigt deshalb die Meldung selbst an, nicht nur ein „Ups". Wer sie * einmal sieht, kann sie weitergeben, und dann ist die Ursache in einer Minute * gefunden statt in einer Stunde. * * `bereich` beschreibt, was gekapselt ist – für die Meldung. */ export default class ErrorBoundary extends Component { constructor(props) { super(props); this.state = { fehler: null, info: null }; } static getDerivedStateFromError(fehler) { return { fehler }; } componentDidCatch(fehler, info) { // React schreibt selbst schon in die Konsole; der Komponentenpfad hilft // zusätzlich beim Einordnen. console.error("Fehler beim Rendern:", fehler, info?.componentStack); this.setState({ info }); } render() { const { fehler, info } = this.state; if (!fehler) return this.props.children; return (
{fehler.stack || String(fehler)}
{info?.componentStack || ""}