Intercepting Routes
Intercepting Routes(경로 가로채기)는 현재 페이지의 context를 유지하면서 현재 레이아웃 내에서 route를 로딩할 수 있다. 이 라우팅 패러다임은 특정 route를 "가로채서" 다른 route를 표시할 때 유용하다.
예를 들어 피드 내에서 사진을 클릭할 때 피드 위에 뜨는 Modal이 사진과 함께 표시되어야 한다. 이 경우 Next.js는 /feed route를 가로채고 이 URL을 "mask"하여(가장하여?) /photo/123을 대신 표시한다.
그러나 공유 가능한 URL을 클릭하거나 페이지를 새로 고침 하는 등 직접 사진으로 이동할 때는 Modal 대신 전체 사진 페이지가 렌더링 되어야 한다. route 가로채기가 발생하면 안된다.
Convention
Intercepting routes는 ( .. ) 컨벤션을 사용하여 정의할 수 있으며 이것은 상대 경로 컨벤션인 ../ 와 유사하지만, segment에 대한 것이다.
다음과 같이 사용가능 :
- ( . ) : 동일한 레벨의 세그먼트를 match 시킨다.
- ( .. ) : 한 레벨 위의 세그먼트를 match 시킨다.
- ( .. ) ( .. ) : 두 레벨 위의 세그먼트를 match 시킨다.
- ( ... ) : 루트 app 디렉토리의 세그먼트를 match 시킨다.
예를 들어 ( .. ) photo 디렉토리를 만들어 feed 세그먼트 내에서 사진 세그먼트를 가로챌(intercept) 수 있다.
* ( .. ) 컨벤션은 파일 시스템이 아니라 route 세그먼트를 기반으로한다.
Examples
Modals
Intercepting Routes는 Parallel Routes와 함께 사용하여 modal을 만들 수 있다.
이 패턴을 사용하여 modal을 만들면 modal 작업시 생기는 몇가지 일반적인 문제를 해결할 수 있고, 이를 통해 다음과 같은 작업을 수행할 수 있다.
- URL을 통해 modal 컨텐츠를 공유할 수 있도록 설정
- 페이지 새로고침할 때 modal을 닫는 대신 context 유지
- 뒤로가기를 할 때 이전 route로 이동하지 않고 modal 닫기
- 앞으로가기를 할 때 modal 다시열기
* 위의 예에서 @modal은 세그먼트가 아니라 슬롯이므로 photo 세그먼트에 대한 route에서 ( ... ) matcher를 사용할 수 있다. 즉, photo route는 파일 시스템상으로는 두 레벨이 높지만, 세그먼트상으로는 하나의 레벨만 높다.
다른 예로는 전용 /login 페이지가 있는 상태에서 상단 navbar에서 로그인 modal을 열거나, 사이드 modal에서 쇼핑 카트를 여는 것이 있다.
Intercepted, Parallel Routes 를 사용한 modal 예시는 다음 url 참조
https://github.com/vercel-labs/nextgram
GitHub - vercel-labs/nextgram: A sample Next.js app showing dynamic routing with modals as a route.
A sample Next.js app showing dynamic routing with modals as a route. - GitHub - vercel-labs/nextgram: A sample Next.js app showing dynamic routing with modals as a route.
github.com
Reference
- https://nextjs.org/docs/app/building-your-application/routing/intercepting-routes
Routing: Intercepting Routes | Next.js
Intercepting routes allows you to load a route within the current layout while keeping the context for the current page. This routing paradigm can be useful when you want to "intercept" a certain route to show a different route. For example, when clicking
nextjs.org
'개인공부' 카테고리의 다른 글
Next.js Docs (12) Middleware (0) | 2023.07.11 |
---|---|
Next.js Docs (11) Route Handlers (0) | 2023.07.08 |
Next.js Docs (9) Parallel Routes (0) | 2023.07.02 |
Next.js Docs (8) Error Handling (0) | 2023.06.28 |
Next.js Docs (7) Loading UI and Streaming (0) | 2023.06.24 |
댓글