next.js/test/e2e/app-dir/segment-cache/prefetch-inlining/app/test-independent-head/layout.tsx
layout.tsx37 lines1.1 KB
import { ReactNode, Suspense } from 'react'
import { cookies } from 'next/headers'

// This layout uses runtime prefetching and sits ABOVE the [item] param.
// It's shared between /test-independent-head/a and /test-independent-head/b.
// Once cached from the first prefetch, a subsequent prefetch to a sibling
// page won't need a runtime request for this layout — it's already cached.
export const unstable_instant = {
  samples: [
    {
      cookies: [{ name: 'theme', value: 'default' }],
      searchParams: { q: null },
      params: { item: 'a' },
    },
  ],
}
export const unstable_prefetch = 'force-runtime'

async function LayoutContent({ children }: { children: ReactNode }) {
  const cookieStore = await cookies()
  const theme = cookieStore.get('theme')?.value ?? 'default'
  return (
    <div>
      <p id="layout-independent-head">Shared layout (theme: {theme})</p>
      {children}
    </div>
  )
}

export default function Layout({ children }: { children: ReactNode }) {
  return (
    <Suspense fallback={<p>Loading layout...</p>}>
      <LayoutContent>{children}</LayoutContent>
    </Suspense>
  )
}
Quest for Codev2.0.0
/
SIGN IN