我正在尝试构建一个NextJS(APP ROUTING)Web应用程序,其中包含两个部分:
1.网站
1.账户
我想让用户通过域访问受限帐户部分。tld/帐户,而该网站的生活在域。tld
问题:在根布局中声明了一个navbar组件,如下所示:
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body className={poppins.className}>
<Navbar />
{children}
</body>
</html>
);
}
应用目录中的所有页面组件都共享上述布局。这里是我的/帐户页面组件:
export default async function Account() {
return (
<>
<p>My Account</p>
</>
);
}
这将返回我不想在帐户部分的web导航栏组件。我如何将根布局分离为web,并为帐户或管理员提供不同的子布局?
2条答案
按热度按时间34gzjxbg1#
有两种方法可以显示除
/account
路由及其子路由之外的所有路径的导航栏。选择正确的一个取决于你的结构的其余部分。1.一般来说,你可以从根布局中删除
<Navbar />
,并将其放置在/foo/layout.tsx
中,以确保只有/foo
和所有子路由显示导航栏,而/account
不显示。1.否则,特别是当它是根级别的区别时,您必须使用所谓的route groups,这是文件夹和路径的逻辑分离,不会直接影响路由。路由组由名称类似于
(groupname)
的文件夹表示。在你的例子中,你应该声明如下结构:在这个例子中,你仍然有一个位于
app/layout.tsx
的根布局,它定义了所有路径的根布局,同时可以将你的<Navbar />
添加到app/(group1)/layout.tsx
(根据你的需要命名组),这将只应用于(group1)
路由组中的所有路径,包括/account
路径。我还没有测试过它,但是如果你的
(group1)
只包含/account
路由,我认为你甚至可以简化它如下:iyr7buue2#
我在我的nextjs应用程序中这样做了,它工作正常。