FrontEnd/Next.js
Link , Router 비교
by 위그든씨
2023. 11. 16.
- 페이지 이동시 <a> 태그를 사용하는 것은 SPA 페이지인 Next.js 에서 효율적이지 못함.
- a 태그로 이동 시 새로고침을 하기 때문에 그 과정에서 빈 화면이 보일 수도 있고 통신을 새롭게 하다 보니 성능 및 사용자 경험 측면에서 떨어질 수 밖에 없다.
- 새로고침 없이 페이지 이동을 위한 (SPA에 위배되지 않기 위해) 라우팅 방식에는 <Link> 와 Router 가 있음
- Link 태그에는 href 속성을 추가하여 가고자 하는 주소(페이지)를 넣는다
- 새로고침 없이 페이지 전환이 됨.
- Client-side navigation 방식으로 , JS로 페이지 전환이 이뤄짐
- <Link> is a React component that extends the HTML <a> element to provide prefetching and client-side navigation between routes. It is the primary way to navigate between routes in Next.js.
- 모든 경우는 아니지만 a 태그를 생성하기 때문에 Router 보다 SEO에 유리함
import Link from 'next/link'
function Home() {
return (
<ul>
<li>
<Link href="/">Home</Link>
</li>
<li>
<Link href="/about">About Us</Link>
</li>
<li>
<Link href="/blog/hello-world">Blog Post</Link>
</li>
</ul>
)
}
export default Home
- window.history.pushState 와 유사함
- next 13 버전부터 page 라우터보다 app라우터를 지향하기 시작하면서 router는 Next/navigation 사용을 권고함(The useRouter from next/router is to be used in the pages folder, the initial way of setting up routes in Next.js. Since v13, they introduced a new directory called app, built on top of Server Components, where you define routes differently and use useRouter from next/navigation:)
- 크롤러가 링크를 감지하지 못하여 SEO에 좋지 않을 수 있음
- 대부분 onClick과 같은 이벤트 핸들러와 같이 사용 함.
- 주요 옵션
- router.push
페이지가 이동되며 히스토리 스택이 쌓인다.
Main -> Login -> List에서 마이페이지로 push 하면 Main -> Login -> List -> Mypage
- router.replace
페이지가 이동되며 히스토리 스택이 교체된다.
Main -> Login -> List 에서 마이페이지로 replace 하면 Main -> Login -> Mypage💡
- router.back
뒤로 가기 기능이며, "window.history.back()"과 동일하다.
- router.reload
새로고침 기능이며, "window.location.reload()"와 동일하다.
'use client'
import { useRouter } from 'next/navigation'
export default function Page() {
const router = useRouter()
return (
<button type="button" onClick={() => router.push('/dashboard')}>
Dashboard
</button>
)
}