javascript 有没有一种方法可以防止根布局组件显示在Next.js的app文件夹中的一些嵌套路径中?

kgsdhlau  于 2023-04-10  发布在  Java
关注(0)|答案(2)|浏览(138)

有没有办法防止rootlayoutdashboardlayout包裹?Next.js v13 doc:

我的文件结构:

我可以使用路由组;但是,这样做会禁用我的contactpricing路由中的 Package 。有什么方法可以防止这种情况发生吗?我想在联系人和定价页面上显示主页导航栏,但不想在 Jmeter 板中显示主页导航栏。
我尝试使用路由组;但是,它禁用了我的定价和联系路线中的 Package 。
navbar.tsx

"use client";
import Link from "next/link";
import Image from "next/image";
import { useEffect, useState } from "react";
import { Disclosure } from "@headlessui/react";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faBars, faTimes } from "@fortawesome/free-solid-svg-icons";

function joinClassName(...classes: string[]) {
  return classes.filter(Boolean).join(" ");
}

const navigationList = [
  {
    title: "API",
    href: "/api",
  },
  { title: "Pricing", href: "/pricing" },

  { title: "Contact", href: "/contact" },
  { title: "Demo", href: "/demo" },
];

export default function Navbar() {
  const [navbar, setNavbar] = useState(false);

  const changeBackground = () => {
    if (window.scrollY >= 64) {
      setNavbar(true);
    } else {
      setNavbar(false);
    }
  };

  useEffect(() => {
    changeBackground();
    window.addEventListener("scroll", changeBackground);
  });

  return (
  <Disclosure as="nav">
      {({ open, close }) => (
        <>
          <div
            className={joinClassName(
              navbar || open ? "dark:bg-black bg-white" : "bg-transparent",
              " fixed top-0 left-0 right-0 z-50 "
            )}
          >
           
          </div>
        </>
      )}
    </Disclosure>
  );
}
q3qa4bjr

q3qa4bjr1#

由于您的Navbar是一个客户端组件,您可以避免使用路由组,但仍然能够防止它显示在/dashboard中,通过使用usePathname,如下所示:

"use client";

// Other imports ...

import { usePathname } from "next/navigation";

export default function Navbar() {
  const pathname = usePathname();
  // useEffect and other codes ...

  if (pathname == "/dashboard") {
    return <></>;
  }
  return <div>Actual content</div>;
}
eyh26e7m

eyh26e7m2#

在做了一些挖掘之后,我设法使它与路由组一起工作。
文件结构

/app/layout.tsx

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang="en" className="">
      <body>{children}</body>
    </html>
  );
}

/app/(dash)/dashboard/layout.tsx

export default function DashboardLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return <section>{children}</section>;
}

/app/(landing)/layout.tsx

export default function LandingLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <section
      className={
        "container mx-auto h-auto bg-white dark:bg-landing-gradient lg:px-10"
      }
    >
      <Navbar></Navbar>
      {children}
      <LightDarkModeButton></LightDarkModeButton>
    </section>
  );
}

Youssouf的解决方案工作得很好。但是, Jmeter 板路线仍然会有rootlayout CSS样式和其他组件,这将需要我手动添加代码行到我不希望在/dashboard中显示的组件。

相关问题