<Suspense>
cookies()
headers()
fetch()
1import { Suspense } from 'react'; 2 3// Static shell - prerendered at build time 4function StaticHeader() { 5 return <header>Dashboard</header>; 6} 7 8// Dynamic hole - rendered at request time 9async function DynamicUserInfo() { 10 const user = await getCurrentUser(); // Uses cookies 11 return <div>Welcome, {user.name}</div>; 12} 13 14export default function Page() { 15 return ( 16 <div> 17 {/* Static content - instant */} 18 // !mark 19 <StaticHeader /> 20 {/* Dynamic content - streams in */} 21 // !mark 22 <Suspense fallback={<Skeleton />}> 23 // !mark 24 <DynamicUserInfo /> 25 </Suspense> 26 </div> 27 ); 28}
Users see the static shell immediately while dynamic content streams in.
Partial Prerendering Demo
12,345
Total Views
1,234
Active Users
3.2%
Conversion
Welcome back, Jane Doe
Last login: 2:27:22 AM