Spaces:
Paused
Paused
// ErrorBoundary.tsx | |
'use client'; | |
import React, { ReactNode, ErrorInfo, Component } from 'react'; | |
interface ErrorBoundaryProps { | |
children: ReactNode; | |
fallback?: ReactNode; | |
} | |
interface ErrorBoundaryState { | |
hasError: boolean; | |
} | |
class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> { | |
constructor(props: ErrorBoundaryProps) { | |
super(props); | |
this.state = { hasError: false }; | |
} | |
static getDerivedStateFromError(_: Error): ErrorBoundaryState { | |
// Update state so the next render will show the fallback UI | |
return { hasError: true }; | |
} | |
componentDidCatch(error: Error, errorInfo: ErrorInfo): void { | |
// You can log the error to an error reporting service | |
console.error("Error caught by ErrorBoundary:", error, errorInfo); | |
} | |
render(): ReactNode { | |
if (this.state.hasError) { | |
// You can render any custom fallback UI | |
return this.props.fallback || <div>Something went wrong.</div>; | |
} | |
return this.props.children; | |
} | |
} | |
export default ErrorBoundary; |