Pular para o conteúdo principal

<AsyncBoundary />

Trata as condições de carregamento e de erro do Suspense.

No React 18, isso cria uma divisão concorrente; no 16 e no 17, exibe fallbacks de carregamento. Se houver um erro irrecuperável, exibe um fallback de erro.

dica

Saiba mais sobre o posicionamento de boundaries aprendendo a co-localizar dependências de dados

Uso​

Coloque o AsyncBoundary nos limites de navegação ou acima deles, como páginas, rotas ou modais.

Dashboard.tsx
import { AsyncBoundary } from '@data-client/react';
import { Outlet } from 'react-router';

export default function Dashboard() {
return (
<div>
<h1>Dashboard</h1>
<section>
<AsyncBoundary>
<Outlet />
</AsyncBoundary>
</section>
</div>
);
}

Depois, use useSuspense() nos componentes que renderizam os dados. Quaisquer erros ou estados de carregamento de qualquer descendente do <AsyncBoundary /> serão renderizados no <AsyncBoundary />. Essa consolidação da UI de fallback melhora o desempenho e a usabilidade.

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

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

Props​

interface BoundaryProps {
children: React.ReactNode;
fallback?: React.ReactNode;
errorClassName?: string;
errorComponent?: React.ComponentType<{
error: NetworkError;
resetErrorBoundary: () => void;
className?: string;
}>;
listen?: (resetListener: () => void) => () => void;
}

fallback​

Qualquer elemento renderizável (React Node) a ser exibido durante o carregamento

errorComponent​

Componente para tratar os erros capturados

Exemplo de fallback personalizado​

import React from 'react';
import { DataProvider, AsyncBoundary } 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>
<AsyncBoundary fallback="loading" errorComponent={ErrorPage}>
<Router />
</AsyncBoundary>
</DataProvider>
);
}

errorClassName​

className a ser repassado ao errorComponent

listen​

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

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

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

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