| import React, {StrictMode, useEffect, useState} from 'react'; |
| import {createRoot} from 'react-dom/client'; |
| import App from './App.tsx'; |
| import './index.css'; |
|
|
| function ErrorBoundary({ children }: { children: React.ReactNode }) { |
| const [hasError, setHasError] = useState(false); |
| const [errorMsg, setErrorMsg] = useState(''); |
|
|
| useEffect(() => { |
| const errorHandler = (event: ErrorEvent) => { |
| setHasError(true); |
| setErrorMsg(event.message + '\n' + (event.error?.stack || '')); |
| }; |
| window.addEventListener('error', errorHandler); |
| return () => { |
| window.removeEventListener('error', errorHandler); |
| }; |
| }, []); |
|
|
| if (hasError) { |
| return ( |
| <div style={{ padding: 20, color: 'red', fontFamily: 'monospace', whiteSpace: 'pre-wrap', background: 'white' }}> |
| <h2>Something went wrong.</h2> |
| <p>{errorMsg}</p> |
| </div> |
| ); |
| } |
|
|
| return <>{children}</>; |
| } |
|
|
| createRoot(document.getElementById('root')!).render( |
| <StrictMode> |
| <ErrorBoundary> |
| <App /> |
| </ErrorBoundary> |
| </StrictMode>, |
| ); |
|
|