티스토리 뷰

개발공부/⬛ Next.js

[Next.js 14] layout.tsx

2024. 6. 28. 12:19

🚩 이 글은 노마드코더의 Next.js 시작하기 강의를 보고 정리한 글입니다. 

 

 

 

 

 

app/layout.tsx는 application 전체의 공통으로 들어가는 컴포넌트들을 작성할 때 사용한다.

 

import Navigation from "../components/navigation";

export const metadata = {
    title: "Next.js",
    description: "Generated by Next.js",
};

export default function RootLayout({ children }: { children: React.ReactNode }) {
    return (
        <html lang="ko">
            <body>
                <header>
                    헤더
                    <Navigation />
                </header>
                {children}
                <footer>푸터</footer>
            </body>
        </html>
    );
}

 

 

헤더와 푸터가 모든 페이지에 공통적으로 들어간 것을 볼 수 있다.

 

 

 

 

아래처럼 about-us폴더 아래 layout.tsx를 만들어주면

회사소개 페이지에만 사용하는 레이아웃을 설정해 줄 수도 있다.

 

이는 about-us 하위의 모든 컴포넌트에 적용된다.

 

export default function AboutUsLayout({ children }: { children: React.ReactNode }) {
    return (
        <div>
            {children}
            <h3>회사소개 페이지의 레이아웃</h3>
        </div>
    );
}

 

 

 

 

 


레이아웃들은 서로 상쇄되는 것이 아니라 중첩된다.

 

 

현재 프로젝트 디렉터리 구조가 아래와 같을 때

 

만약 sales 페이지에 이동하고 싶다면 next.js는 page를 먼저 찾은 다음

가장 가까운 레이아웃(/app/about-us/team/sales/layout.tsx)을 찾는다.

 

그 다음 파일의 상위 경로(/app/about-us/team)로 이동하여 layout.tsx가 있는지 확인하고

레이아웃이 있는 경우에는 해당 레이아웃을 중첩하고 없다면 그 다음 상위(/app/about-us)를 마찬가지로 확인한다.

 

/app/about-us에 있는 layout도 중첩되고 그 다음 /app에 있는 root layout까지 확인하여 총 3개의 레이아웃이 중첩된다.

<RootLayout>
    <AboutUsLayout>
    	<SalesTeamLayout>
            <SalesTeamPage />
        </SalesTeamLayout>
    </AboutUsLayout>
</RootLayout>

 

 

반응형
프로필사진
개발자 삐롱히

프론트엔드 개발자 삐롱히의 개발 & 공부 기록 블로그