Link
가 있는데 왜 쓰는가?
👉 추가적인 기능들을 사용하기 위하여
useRouter
를 포함하여 use~
는
Client Component
에서만 사용할 수 있으니 'use client'
선언을 해주자.
기존의 큰 파일은 보통 Server Component
이기 때문에 따로 useRouter
를 위한 파일을 만들어준다.
"use client";
import { useRouter } from "next/navigation";
export default function DetailLink() {
let router = useRouter();
return (
<button
onClick={() => {
router.push("/");
}}
>
버튼
</button>
);
}
그리고 router
를 사용할 기존의 Server Component
에서 컴포넌트를 import하여 사용한다.
여기선 <DetailLink />
컴포넌트를 import 하였다.
import { connectDB } from "@/util/database";
import Link from "next/link";
import DetailLink from "./DetailLink";
export default async function List() {
const client = await connectDB;
const db = client.db("forum");
let result = await db.collection("post").find().toArray();
return (
<div className="list-bg">
{result.map((e, i) => {
return (
<div className="list-item" key={i}>
<Link href={"/detail/" + result[i]._id}>
<h4>{e.title}</h4>
</Link>
<p>{e.content}</p>
<DetailLink />
</div>
);
})}
</div>
);
}
'use client'
import {useRouter} from 'next/navigation'
export default function DetailLink(){
let router = useRouter()
return (
<button onClick={()=>{ router.push('/') }}>버튼</button>
)
}
router.push('/~') : 해당 경로로 페이지 이동
router.back() : 뒤로 가기
router.forward() : 앞으로 가기
router.refresh()** : 바뀐 부분만 새로고침
router.prefetch('/~') : /~의 경로를 미리 로드해준다.(빠른 이동 가능)
Link
에 기본적으로 prefetch
속성이 있기 때문에 Server Component
에서도 prefetch할 수 있다.
만약 prefetch
속성을 끄고 싶다면(화면에 너무 많은 Link
가 있거나 하는 경우)
<Link href={'/~'} prefetch={false}>링크</Link>