Pular para o conteúdo principal

<ErrorBoundary />

Exibe um componente de fallback quando um erro é lançado (incluindo useSuspense() rejeitado).

informação

Componente reutilizável de Error Boundary para React.

Uso​

Coloque ErrorBoundary em limites de navegação ou acima deles, como páginas, rotas ou modais, para "capturar" erros e renderizar uma UI de fallback.

import React from 'react';
import { ErrorBoundary, useSuspense } from '@data-client/react';
import { MyEndpoint } from './MyEndpoint';

export default function MyPage() {
return (
<ErrorBoundary>
<SuspendingComponent />
</ErrorBoundary>
);
}

function SuspendingComponent() {
const data = useSuspense(MyEndpoint);

return <div>{data.text}</div>;
}

Props​

interface Props<E extends Error> {
children: React.ReactNode;
className?: string;
fallbackComponent: React.ComponentType<{
error: E;
resetErrorBoundary: () => void;
className?: string;
}>;
listen?: (resetListener: () => void) => () => void;
}

fallbackComponent​

import React from 'react';
import { DataProvider, ErrorBoundary } from '@data-client/react';
import Router from './Router';

function ErrorPage({
error,
className,
resetErrorBoundary,
}: {
error: Error;
resetErrorBoundary: () => void;
className?: string;
}) {
return (
<pre role="alert" className={className}>
{error.message} <button onClick={resetErrorBoundary}>Reset</button>
</pre>
);
}

export default function App() {
return (
<DataProvider>
<ErrorBoundary fallbackComponent={ErrorPage} className="error">
<Router />
</ErrorBoundary>
</DataProvider>
);
}

listen​

Handler de assinatura para redefinir o estado de erro em eventos como mudanças na URL. É ótimo para envolver componentes de roteamento com um boundary.

Um exemplo usando o Anansi Router, que usa a assinatura do history.

import { useRouter, Link, MatchedRoute } from '@anansi/router';
import { ErrorBoundary } from '@data-client/react';

function App() {
const { history } = useRouter();
return (
<div>
<nav>
<Link name="Home">Coin App</Link>
</nav>
<main>
<ErrorBoundary listen={history.listen}>
<MatchedRoute index={0} />
</ErrorBoundary>
</main>
</div>
);
}

className​

className a ser repassado para fallbackComponent