useRouter()
react-router-dom dml useNavigation 기능을 Next.js 에서 next/route useRouter()로 구현할 수 있다.
import { useRouter } from 'next/router';
export default function Home() {
const router = useRouter();
console.log(router);
// ...
}
- pathname: string: 현재 경로로 페이지 경로 이면, basePath 또는 locale 은 포함되지 않는다.
- query: object: 동적 라우트 매개변수를 포함하는 객체로 구문 분석된 쿼리 문자열
- asPath: string: basePath또는 locale 없이 브라우저에 표시되는 경우(query포함)
- isFallback: boolean: 현재 페이지의 fallback 모드 여부
- basePath: string: 활성화된 basePath
- locale : string : 활성화된 locale
- locales : string[] : 지원되는 모든 locale
- isReady : boolean : 라우터 필드가 클라이언트 측에서 업데이트되고 사용할 준비가 되었는지 여부. useEffect 메소드 내에서만 사용해야하며 서버에서 조건부로 렌더링 하는 데에 사용해야 한다.
- isPreview : boolean : 애플리케이션의 미리보기 모드 여부
router.push
클라이언트 사이드의 라우팅 처리를 할 수 있는 기능이다.
router.push(url, as, options)
- url (Reqired): 이동할 경로
- as (Optional): 브라우저에서 표시된 경로
- scroll: 기본값은 true 페이지 이동 후 상단으로 스크롤
- shallow: 기본값은 false로 getStatickProps, getServerSideProps, getInitalProps 를 실행하지 않고 현재 페이지의 경로를 업데이트하는 얕은 라우팅을.
- locale: 새 페이지의 locale 을 나타낸다.
How does navigation work?
- Link 나 router.push() 로 경로전환이 일어난다.
- 브라우저 주소창에 있는 URL을 업데이트한다.
- 라우터는 클라이언트 측 캐시에서 변경되지 않은 segment를 재사용하여 불필요한 작업을 방지한다. 이를 부분 렌더링이라고도 한다.
- soft navigation 조건이 만족하면, 라우터는 서버 대신 캐시에서 새로운 segment를 가져온다. 그렇지 않으면, hard navigation 을 수행하고 서버 컴포넌트를 불러온다.
- 컴포넌트가 created 되었다면, payload를 fetch 하는 동안 loading UI 가 표시된다.
- 라우터는 캐시된 payload 또는 새로운 payload 를 사용해 클라이언트의 새 segment를 렌더링한다.
Hard navigation
Navigation 시 캐시는 무효화되고 서버에서 데이터를 다시 가져와 변경된 segment 를 리렌더링한다.
Soft navigation
Navigation 시 변경된 segment 에 대한 캐시는 재사용되며, 서버에게 새로운 데이터 요청을 보내지 않는다.
Conditions for Soft Navigation
탐색 시 당신이 탐색 중인 경로가 prefetch 되었으며 동적 segment 가 포함되지 않았거나 현재 경로와 동일한 동적 매개변수가 있는 경우 Next.js 는 Soft Naviagtion 을 사용한다.
- /dashboard/team-red/*에서 /dashboard/team-red/*로 이동하면 Soft Navigation
/dashboard/team-red/*에서 /dashboard/team-blue/*로 이동하면 Hard Navigation
Back/Forward Navigation
뒤로가기/앞으로가기 또한 Soft Navigation로 동작한다. 이는 클라이언트 측 캐시가 재사용되고, navigation 이 near-instant 라는 것을 의미한다.
Focus and Scroll Management
기본적으로, Next.js 는 navigation 시 변경된 세그먼트에 초점을 맞추고 스크롤 하여 보여준다.
Client-side Caching of Rendered Server Components
새 라우터에는 서버 컴포넌트의 렌더링 결과를 저장하는 in-memory client-side cache 가 있다. 캐시는 동시 렌더링에서 일관성을 보장하는 route segment 로 분할된다.
사용자가 앱을 탐색할 때 라우터는 이전에 가져온 세그먼트와 미리 가져온 세그먼트의 페이로드를 캐시에 저장한다.
즉, 특정 경우, 라우터는 서버에 새 요청을 하는 대신 캐시를 다시 사용할 수 있다. 이렇게 하면 데이터를 다시 가져오고 구성 요소를 불필요하게 다시 렌더링하지 않으므로 성능이 향상된다.
'React > Next.js' 카테고리의 다른 글
[Next.js] Next.js 에서의 localStorage (2) | 2023.12.07 |
---|---|
[Next.js] Route System - 4) Route Groups (4) | 2023.12.06 |
[Next.js] Route System - 2) next/link - Link (0) | 2023.12.05 |
[Next.js] Route System - 1) pages, app 라우팅 (0) | 2023.12.05 |
[Next.js] Server Components (0) | 2023.12.04 |
댓글