예시로 이처럼 폴더 구조가 이루어져 있다면 라우팅은
index.js => http://localhost:3000
about.js => http://localhost:3000/about
portfolio/index.js => http://localhost:3000/portfolio
portfolio/[id].js => http://localhost:3000/portfolio/1
portfolio/list.js => http://localhost:3000/portfolio/list
clients/index.js => http://localhost:3000/clients
clients/[id]/index.js => http://localhost:3000/clients/1
clients/[id]/[clientid].js => http://localhost:3000/clients/1/2
으로 세팅된다.
// portfolio/[id].js
import { useRouter } from "next/router";
function PortfolioProjectPage() {
const router = useRouter();
console.log(router.pathname);
console.log(router.query);
return (
<div>
<h1>PortfolioProjectPage{router.query.id}</h1>
</div>
);
}
export default PortfolioProjectPage;
코드에서 console.log를 보면
router.pathname을 통해 경로를,
router.query를 통해 동적 라우팅 시 동적 경로값을 가져올 수 있다.
// clients/[id]/[clientid].js
import { useRouter } from "next/router";
function SelectedClientProjectPage() {
const router = useRouter();
console.log(router.query);
return (
<div>
<h1>SelectedClientProjectPage</h1>
</div>
);
}
export default SelectedClientProjectPage;
이처럼 폴더이름과 js파일 둘다 []를 사용하게 되면
router.query에서 id와 clientid 두가지를 같이 리턴해주는 것을 로그를 통해 확인할 수 있다.
// blog/[...slug].js
import { useRouter } from "next/router";
function BlogPostsPage() {
const router = useRouter();
console.log(router.query);
return (
<div>
<h1>BlogPostsPage</h1>
</div>
);
}
export default BlogPostsPage;
http://localhost:3000/blog/2023/12/03 로 들어갔을 때,
slug가 배열형식인 것을 확인할 수 있다.