next.js 使客户端组件布局到服务器组件

fsi0uk1n  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(167)

我做了一个响应侧边栏与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构成了整个布局客户端组件。任何方式,我可以提取这一点,并使布局服务器组件或只是让它。

gv8xihay

gv8xihay1#

布局作为客户端组件的“问题”是,您已经越过了障碍,基本上所有内容都是客户端的子组件。
如果您确实希望应用程序使用服务器组件,则需要将布局拆分为子布局,其中一些子布局是客户端布局。我的“通常”布局看起来是这样的

<>
  <header><TopNav/></header>
  <main>{children}</main>
  <footer>{// whatever you want in your footer}</footer>
</>

字符串
并且是服务器组件。现在,您可以将TopNav作为客户端组件,而不会影响所有{children}
在这种情况下,TopNav不仅是顶部的栏,而且是顶级导航,可以包括侧边栏,移动的菜单等。

相关问题