이전 블로그와 같은 결로 라우팅에 대해 더 자세히 살펴보자!
라우팅에는 정적 라우팅 (Static Routing)과 동적 라우팅 (Dynamic Routin)이 있다.
정적 라우팅과 동적 라우팅은 둘 중 뭐가 좋고 나쁘다가 아닌, 케이스마다 적절히 사용해야 한다!
정적 라우팅이란 두 라우터 간에 연결된 경로가 고정되어 있는 것을 말한다.
즉, 변경 사항이 발생했을 경우 라우팅 경로를 수동으로 업데이트해줘야 한다.
로그인 화면은 항상 로그인 화면만 보여줘야 하므로 정적 라우팅이 필요하다.
동적 라우팅이란 두 라우터 간에 연결된 경로가 자동 업데이트 되는 것을 말한다.
즉, 변경 사항이 발생했을 경우 정적 라우팅과 달리 라우팅 경로가 자동으로 업데이트된다.
게시물 상세보기 페이지는 어떤 게시물인지에 따라 페이지가 바껴야 하고, 게시물이 수천 개일 경우 수천 개의 페이지를 다 만들 수 없으로 동적 라우팅이 필요하다.
import {useRouter} from 'next/router'
export default function StaticRoutingPage() {
const router = useRouter()
const onClickMove1 = () => {
router.push('/static-routed-board-query/1)
}
return (
<button onClick={onClickMove1}> 1번 게시글 이동 </button onClick={onClickMove1}>
)
}
import {useQuery, gql} from '@apollo/client'
const FETCH_BOARD = gql `
query fetchBoard($number: Int) {
fetchBoard(number: $number) {
number
writer
title
contents
}
}
`
export default function StaticRoutedPage() {
const {data} = useQuery (FETCH_BOARD, {
varialbes: {
number : 2
}
})
return(
<>
<div>1번 게시글 이동 완료</div>
<div>작성자 : {data?.fetchBoard.writer}</div>
<div>제목 : {data?.fetchBoard.title}</div>
<div>내용 : {data?.fetchBoard.contents}</div>
</>
)
}
import {useRouter} from 'next/router'
export default function DynamicRoutingPage() {
const router = useRouter()
const onClickMove1 = () => {
router.push('/static-routed-board-query/1)
}
return (
<button onClick={onClickMove1}> 1번 게시글 이동 </button onClick={onClickMove1}>
)
}
import {useQuery, gql} from '@apollo/client'
const FETCH_BOARD = gql `
query fetchBoard($number: Int) {
fetchBoard(number: $number) {
number
writer
title
contents
}
}
`
export default function DynamicRoutedPage() {
const {data} = useQuery (FETCH_BOARD, {
varialbes: {
number : Number(router.query.number)
}
})
return(
<>
<div>{router.query,number}번 게시글 이동 완료</div>
<div>작성자 : {data?.fetchBoard.writer}</div>
<div>제목 : {data?.fetchBoard.title}</div>
<div>내용 : {data?.fetchBoard.contents}</div>
</>
)
}