이 포스트만 보기보다 공식문서를 같이 옆에 두고 보는거 추천
app
)에서 페이지와 레이아웃을 선언해야한다. app
폴더 안에 page.tsx 만들면 됨. app
안에 있는 page.tsx가 localhost:3000
으로 접속했을 때 가장 먼저 보이는 페이지가 됨// 폴더 구조
app/
├── blog/
│ ├──[id]/
│ │ ├──page.tsx
│ ├── page.tsx
│ ├── layout.tsx
├── page.tsx
├── layout.tsx
app/
: Root Segment
blog
: Segment
[slug]
: Leaf Segment
[slug]
는/blog
안에 특정 게시물에 대한 동적 라우트를 생성할 수 있다.
Dynamic Routes에서 다뤄볼 예정
기본적으로 폴더 계층 구조에 있는 Layout은 중첩되며 자식 Layout을 children
prop로 내려준다.
렌더링을 진행할 때 바로 해당 컴포넌트로 가서 렌더링을 진행하는게 아니라.
일단 Layout 컴포넌트로 이동해서 export default
된 Layout이 있는지 확인하고 렌더링 진행
RootLayout
확인 → URL확인 → URL의 subLayout
확인 → 렌더링 진행 Ex_)
// 폴더 계층 구도 app/ ├── blog/ │ ├──[id]/ │ │ ├──page.tsx │ ├── page.tsx │ ├── layout.tsx ├── page.tsx ├── layout.tsx
최상위
app
폴더의 Layout이 아래blog
Layout을 감싼다는 말// app/layout.tsx export default function RootLayout({ children, }: { children: React.ReactNode; }) { return ( <html lang="en"> <body> <Nav /> <h1>im layout</h1> {children} </body> </html> ); }
// app/blog/Layout.tsx export default function BlogLayout({ children, }: { children: React.ReactNode; }) { return ( <div> © Next JS is great! {children} </div> ); }
아래처럼 중첩되어 있다는 것
<RootLayout> <BlogLayout /> // Blog page에 가면 Root Layout도 당연히 보인다. BlogLayout은 children 임! </RootLayout>
[]
를 씌워서 폴더를 생성하게 되면 해당 폴더의 동적 라우트가 가능해진다. <Route path="/blog/:id" element={<BlogPage />} />
// 폴더 구조
app/
├── blog/
│ ├──[id]/ //동적 라우팅
│ │ ├──page.tsx
│ ├── page.tsx
│ ├── layout.tsx
├── page.tsx
├── layout.tsx
주요한 파일 이름을 가진 애들이 있다.
page.tsx
Layout.tsx
loading.tsx
error.tsx
not-found.tsx