Next JS Layout

Next JS 13버전에서 레이아웃 제외 하는 방법

라우팅 그룹을 이용하는 방법

모든 자식에게 필요한 레이아웃 요소만 포함하고 그룹화를 사용하여 공통 섹션에서 레이아웃을 공유한다.
app디렉토리 파일 구조의 예시.
-- (auth)/ # only for grouping, does not add to url /signin/page.tsx /singout/page.tsx /singup/page.tsx /layout.tsx # shared between auth group only -- (dashboard)/ /page.tsx # home page /layout.tsx -- layout.tsx # main layout, used in ALL pages
Shell
복사

클라이언트 컴포넌트를 이용하는 방법

RootLayout의 경우

RootLayout은 use client 를 사용할 수 없기 때문에, 다음과 같은 방법을 이용해야만 한다. 그 후, usePathname 혹은 useSelectedLayoutSegment 를 이용한다.
1.
 /app 하위에 레이아웃 페이지를 만듭니다
// /app/LayoutProvider.tsx 'use client' import { usePathname } from 'next/navigation'; export const LayoutProvider = ({ children }) => { const pathname = usePathname(); return ( <> {pathname === "/posts" && <h1>Welcome to Posts page!</h1>} {children} </> ) };
JavaScript
복사
2.
루트 레이아웃 래핑( /app/layout.tsx)
// /app/layout.tsx import { LayoutProvider } from './LayoutProvider'; export default function RootLayout({ children }) { return ( <html lang="en"> <body> <LayoutProvider> {children} </LayoutProvider> </body> </html> ) }
JavaScript
복사

RootLayout이 아닌 경우

RootLayout이 아닌 경우에는, use client 를 사용할 수 있다. 따라서, 특정 폴더 하위의 layout의 경우에는 Provider를 만들 필요없이 사용하면 된다.
useSelectedLayoutSegment 를 이용하는 방법.
// /app/products/layout.tsx "use client"; import { useSelectedLayoutSegment } from "next/navigation"; import styles from "./product.layout.module.css"; export default function ProductLayout({ children, }: { children: React.ReactNode; }) { const segment = useSelectedLayoutSegment(); if (segment === "slug2") { return children; } return ( <div> <nav className={styles.nav}> <a href="">여성옷</a> <a href="">남성옷</a> </nav> {children} </div> ); }
JavaScript
복사
usePathname 를 이용하는 방법.
// /app/products/layout.tsx "use client"; import { usePathname } from "next/navigation"; import styles from "./product.layout.module.css"; export default function ProductLayout({ children, }: { children: React.ReactNode; }) { const pathName = usePathname(); if (pathName === "/product/slug2") { return children; } return ( <div> <nav className={styles.nav}> <a href="">여성옷</a> <a href="">남성옷</a> </nav> {children} </div> ); }
JavaScript
복사

참고