Next.js Layout.js

2024. 7. 4. 15:42·Next.js/실험실
반응형

UI를 공유하기 위해서 사용하는 layout 파일이다. 

부모 경로에서 만들어둔  layout 파일은 부모의 자식 경로에 모두 적용이 된다. 

/main/board 경로가 구성되어 있다고 했을 때, board 페이지가 렌더링되면 main의 layout이 렌더링되고

board의 layout 마지막으로 page가 렌더링된다. 

 

root 경로에 있는 layout ( root layout ) 은 반드시 있어야 하며 html 태그나 body 태그를 포함해야 한다. 

기본적으론 Server Component지만 'use client' 옵션을 준다면 Client Component로 구성될 수 있다. 

 

layout을 통해 현재 선택된 레이아웃의 경로를 알기 위해서는 useSelectedLayoutSegment 또는 

useSelectedLayoutSegments를 사용하면 된다. 

 

단, 해당 Hook을 사용하려면 Client Components라는 조건이 필요하다. 


useSelectedLayoutSegment

클라이언트 컴포넌트의 Hook으로 호출된 레이아웃보다 한 단계 아래에 활성경로 세그먼트를 

읽을 수 있게 해준다. 

Layout Visited URL Return
app/layout / null
app/layout /dashboard "dashboard"
app/layout /dashboard/settings "dashboard"

 

useSeletedLayoutSegments

클라이언트 컴포넌트의 Hook으로 호출된 레이아웃 아래 활성경로 세그먼트를 가져올 수 있다. 

Layout Visited URL Return
app/layout / []
app/layout /dashboard ["dashboard"]
app/layout /dashboard/settings ["dashboard", "setting"]

경로는 동일하지만 다른 레이아웃이 적용되어야 하는 경우가 있다. 

예를들어 [ /account, /cart, /checkout ] 경로가 존재한 상태고 [ /account ], [ /cart ]는 shop의 경로이고 [ /checkout ]은

속하지 않는 상황이라고 생각해보자. 

 

여기에 shop에 공통 레이아웃이 존재한다면 url을 [ /shop/account, /shop/cart, /checkout ] 처럼 만들 수 있을 것이다. 

하지만 여기서 [ /shop ] 경로에 페이지가 있을 필요가 없다면 레이아웃을 공통으로 사용하기 위해서 [ /shop ] 이라는

경로가 생기는 것이 된다. 

 

이때 사용할 수 있는 것이 Route Group이다. 

 

Route Group

실제로 url 상에는 존재하지 않지만 가상의 라우팅 그룹을 만든다고 생각하면 된다. 

사용하는 방법으로는 (그룹명) 형식으로 폴더를 만들어주면 된다. 

 

위와 같은 경우에서는 [(shop)/account, (shop)/cart, /checkout ] 방식으로 구현할 수 있을 것이다. 

그리고 (shop) 폴더 아래에 layout 파일을 만들어서 공통 UI를 만들면 가상 그룹 안에 해당하는 페이지들에겐 

공통 UI를 렌더링할 수 있게 된다. 

반응형
저작자표시 비영리 변경금지

'Next.js > 실험실' 카테고리의 다른 글

Next.js metadata  (1) 2024.07.10
Next.js Loading.js & Suspense  (1) 2024.07.07
Next.js Atomic Design Pattern 그 모시깽한 모시깽  (1) 2024.06.30
not-found와 layout  (1) 2024.06.19
포괄 검색어로 홈페이지 노출시키기  (2) 2024.06.09
'Next.js/실험실' 카테고리의 다른 글
  • Next.js metadata
  • Next.js Loading.js & Suspense
  • Next.js Atomic Design Pattern 그 모시깽한 모시깽
  • not-found와 layout
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    타입스크립트
    프로그래머스
    자바스크립트
    리얼학습일기
    영어독학
    ReactNative
    typescript
    덤프
    네트워크
    바질
    영어회화
    네이버 부스트캠프
    식물
    타일러영어
    next.js
    Docker
    CCNA
    알고리즘
    바질 키우기
    다이소
    Node.js
    리액트
    리얼클래스
    ChatGPT
    react
    javascript
    Babel
    redux
    CSS
    webpack
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
Next.js Layout.js
상단으로

티스토리툴바