我做了一个响应侧边栏与headlessui过渡。
"use client";
export default function Layout({ children }: { children: React.ReactNode }) {
const [sidebarOpen, setSidebarOpen] = useState(false);
return (
<>
<div>
<Transition.Root show={sidebarOpen} as={Fragment}>
...
</Transition.Root>
{/* Static sidebar for desktop */}
<div className="hidden lg:fixed">
<SideBar />
</div>
<div className="lg:pl-72">
<div>
<button
type="button"
className="lg:hidden"
onClick={() => setSidebarOpen(true)}
>
<Bars3Icon />
</button>
</div>
<NavBar />
<main className="py-10">
<div className="px-4 sm:px-6 lg:px-8">{children}</div>
</main>
</div>
<div>
</>
);
}
个字符
Transition中的sidebarOpen
和按钮中的setSidebarOpen
构成了整个布局客户端组件。任何方式,我可以提取这一点,并使布局服务器组件或只是让它。
1条答案
按热度按时间gv8xihay1#
布局作为客户端组件的“问题”是,您已经越过了障碍,基本上所有内容都是客户端的子组件。
如果您确实希望应用程序使用服务器组件,则需要将布局拆分为子布局,其中一些子布局是客户端布局。我的“通常”布局看起来是这样的
字符串
并且是服务器组件。现在,您可以将
TopNav
作为客户端组件,而不会影响所有{children}
。在这种情况下,
TopNav
不仅是顶部的栏,而且是顶级导航,可以包括侧边栏,移动的菜单等。