React 19 improves Suspense with better streaming and error handling.
Code:
1import { Suspense, use } from "react";23function App() {4 return (5 <div>6 <Header />7 <Suspense fallback={<PageSkeleton />}>8 <MainContent />9 </Suspense>10 <Footer />11 </div>12 );13}1415async function MainContent() {16 const data = await fetchData(); // Suspends here17 return <div>{data.content}</div>;18}
Improvements:
1. Better streaming:
2. Error boundaries:
1<ErrorBoundary fallback={<ErrorPage />}>2 <Suspense fallback={<Loading />}>3 <AsyncComponent />4 </Suspense>5</ErrorBoundary>
3. Nested Suspense:
1<Suspense fallback={<PageSkeleton />}>2 <Header />3 <Suspense fallback={<ContentSkeleton />}>4 <Content />5 </Suspense>6 <Suspense fallback={<SidebarSkeleton />}>7 <Sidebar />8 </Suspense>9</Suspense>
4. With TanStack Query:
1function UserProfile({ userId }) {2 const { data } = useQuery({3 queryKey: ["user", userId],4 queryFn: () => fetchUser(userId),5 suspense: true,6 });78 return <div>{data.name}</div>;9}1011<Suspense fallback={<Spinner />}>12 <UserProfile userId={1} />13</Suspense>
Benefits: