🌀 Link
✏️ Link 컴포넌트???
- 예전에는 a 태그를 이용해서 페이지 이동. 하지만 a 태그는 새 페이지를 불러오기 위해 새로운 http요청을 보냄, react 앱을 실행할 때 갖는 state가 변경되는 단점이 있음
- 그래서 Link 컴포넌트 사용, Link 컴포넌트는 리액트 구조에 맞게 페이지를 이동
import Link from "next/link"
export default function HomePage() {
return (
<div>
<h1>홈페이지</h1>
<ul>
<li>
// Link 컴포넌트의 href 속성에 이동하고자 하는 페이지 경로를 입력하면 됨
<Link href="/portfolio">포트폴리오</Link>
</li>
</ul>
</div>
)
}

✏️ 동적 라우트로 navigating
- 리액트에서 하던 방식 그대로 동적 데이터를 map()을 사용해서 동적인 경로를 만들어 주면 된다.
import Link from "next/link"
export default function ClientsPage() {
const clients = [
{ id: "dan", name: "bidanee" },
{ id: "lee", name: "leeyoung" },
{ id: "max", name: "parkji" },
]
return (
<div>
<h1>유저 페이지</h1>
<ul>
{clients.map((client) => (
<li key={client.id}>
<Link href={`/clients/${client.id}`}>{client.name}</Link>
</li>
))}
</ul>
</div>
)
}
✏️ Link 컴포넌트의 href
- 경로를 문자열 대신 객체로 작성가능
import Link from "next/link"
export default function ClientsPage() {
const clients = [
{ id: "dan", name: "bidanee" },
{ id: "lee", name: "leeyoung" },
{ id: "max", name: "parkji" },
]
return (
<div>
<h1>유저 페이지</h1>
<ul>
{clients.map((client) => (
<li key={client.id}>
<Link
href={{
pathname: "/clients/[id]",
query: { id: client.id },
}}
>
{client.name}
</Link>
</li>
))}
</ul>
</div>
)
}
✏️ 버튼으로 navigating
- 다른 페이지로 이동시키는 push 메서드를 사용 (useRouter()의 속성)
- push는 Link컴포넌트처럼 경로를 객체로 구성 가능
- push대신 replace를 사용하면 이동할 페이지를 현재페이지에서 켜주기 때문에 바로 직전 페이지로 돌아가지 못함
import { useRouter } from "next/router"
export default function ClientProjectsPage() {
const router = useRouter()
const loadProjectHandler = () => {
/*
1. push => router.push("clients/dan/project1")
2. push의 경로를 객체로
router.push({
pathname:"/client/[id]/[clientprojectid]",
query:{id:"dan", clientprojectid:"project1"}
}
3. replace => router.replace("/clients/dan/project1")
*/
}
return (
<div>
<h1>사용자의 프로젝트</h1>
<button onClick={loadProjectHandler}>프로젝트1</button>
</div>
)
}
320x100
'Next.js' 카테고리의 다른 글
파일 기반 라우팅 (Feat. Page Router) (0) | 2024.05.17 |
---|---|
Next.JS의 보호된 파일명 (0) | 2024.05.03 |
Next.js 배포 (0) | 2023.09.20 |
server component와 client component (0) | 2023.06.28 |
NEXT의 pages (0) | 2023.06.28 |