在 Next.js 13 中将 props 传递给动态路由(App Router)的布局
2023-11-09
1571
我想将 props 传递给某些动态路由的 Layout。 这是项目结构:
/app
-/(site)
--/layout.tsx
--/page.tsx
--/[slug]/page.tsx
--/[slug]/layout.tsx
在站点布局中:
export default async function IndexRoute({
children
}: {
children: React.ReactNode
}) {
const settings = await getSettings()
const layout = (
<html lang='en'>
<body>
<div className='flex min-h-screen flex-col'>
<a className='sr-only' href='#mainContent'>
Skip to content
</a>
<Suspense>
<Masthead />
</Suspense>
<main className='flex flex-1 flex-col ' id='mainContent'>
<Suspense>{children}</Suspense>
</main>
<Suspense>
<Foundation menus={settings.menus.footer} />
</Suspense>
</div>
</body>
</html>
)
return layout
}
显然,此布局将把 [slug] 布局视为嵌套布局。我的目标是为 [slug] 路由创建一个布局,以便我可以将 props 传递给该布局。 我该如何解决这个问题?
1个回答
页面和布局之间没有通信。
page.tsx
被渲染为布局的
children
组件。
从这里
Unlike Pages, Layout components do not receive the searchParams prop. This is because a shared layout is not re-rendered during navigation which could lead to stale searchParams between navigations.
这是因为布局文件充当模板或结构框架,定义网站或 Web 应用程序内多个页面的整体结构、设计和元素排列。它不会重新渲染,因此即使用户导航到另一个页面,他们也始终可以在浏览器上看到布局组件。
Yilmaz
2024-01-03