๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
React/Nextjs

[Nextjs] Dynamic Route, ๋™์  ๋ผ์šฐํŒ…

by LasBe 2024. 8. 3.
๋ฐ˜์‘ํ˜•

๐Ÿ“’ Dynamic Route, ๋™์  ๋ผ์šฐํŒ…


URL ๊ฒฝ๋กœ์˜ ํŠน์ • ๋ถ€๋ถ„์„ ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•ด, ๋‹ค์–‘ํ•œ ๊ฐ’์— ๋”ฐ๋ผ ํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์ธ ๋™์  ๋ผ์šฐํŒ…์— ๋Œ€ํ•œ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“Œ ๊ธฐ๋ณธ ๊ทœ์น™

ํด๋” ๊ตฌ์กฐ๋กœ ๊ฒฝ๋กœ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” Nextjs๋Š” ๋Œ€๊ด„ํ˜ธ๋ฅผ ํ†ตํ•ด ๋™์  ๋ผ์šฐํŒ…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ex 1
    • ๊ตฌ์กฐ : app/post/[pageNum]/page.tsx
    • URL : /post/1
    • params : { pageNum: 1 }
  • ex 2
    • ๊ตฌ์กฐ : app/post/[title]/page.tsx
    • URL : /post/์ œ๋ชฉ1
    • params : { title : ์ œ๋ชฉ1 }

 

๐Ÿ“Œ ๋‹จ์ผ ์„ธ๊ทธ๋จผํŠธ

๋‹จ์ผ ์„ธ๊ทธ๋จผํŠธ๋กœ ๋™์  ๋ผ์šฐํŒ…์„ ํ•˜๋ ค๋ฉด ์œ„์˜ ์˜ˆ์‹œ์™€ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”Ž ๊ทœ์น™

[params_์ด๋ฆ„] โ†’ params : { params_์ด๋ฆ„ : ๊ฐ’ }

๐Ÿ”Ž ํด๋” ๊ตฌ์กฐ

single
โ””โ”€โ”€ [id]
           โ””โ”€โ”€ page.tsx

๐Ÿ”Ž ์˜ˆ์ œ

type Props = { params: { id: string } };

export default function Single(props: Props) {
  const { params } = props;
  console.log("PROPS =>", props);
  return (
    <div>
      <h1>{JSON.stringify(params)}</h1>
    </div>
  );
}

๐Ÿ”Ž ๊ฒฐ๊ณผ

/single/1

 

๐Ÿ“Œ ํฌ๊ด„์ ์ธ ์„ธ๊ทธ๋จผํŠธ

/post/a/1/hi ์™€ ๊ฐ™์ด url์— ๋ชจ๋“  ์„ธ๊ทธ๋จผํŠธ๋ฅผ ํฌํ•จํ•˜๋„๋ก ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.

ํฌํ•จ๋œ ์„ธ๊ทธ๋จผํŠธ ๊ฐ’์€ [a, 1, hi]์™€ ๊ฐ™์ด ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”Ž ๊ทœ์น™

[...params_์ด๋ฆ„] โ†’ params : { params_์ด๋ฆ„ : [๊ฐ’1, ๊ฐ’2, ...] }

๐Ÿ”Ž ํด๋” ๊ตฌ์กฐ

catchAll
โ””โ”€โ”€ [โ€ฆid]
            โ””โ”€โ”€ page.tsx

๐Ÿ”Ž ์˜ˆ์ œ

type Props = { params: { id: string[] } };

export default function CatchAll(props: Props) {
  const { params } = props;
  console.log("PROPS =>", props);
  return (
    <div>
      <h1>{JSON.stringify(params)}</h1>
    </div>
  );
}

๐Ÿ”Ž ๊ฒฐ๊ณผ

/catchAll/1/2/3/4

 

๐Ÿ“Œ ์„ ํƒ์ ์ธ ํฌ๊ด„์  ์„ธ๊ทธ๋จผํŠธ

์ด ์„ธ๊ทธ๋จผํŠธ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์—†์–ด๋„ ๋˜๊ณ , ์žˆ๋‹ค๋ฉด ํฌ๊ด„์ ์ธ ์„ธ๊ทธ๋จผํŠธ๋กœ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๐Ÿ”Ž ๊ทœ์น™

[[...params_์ด๋ฆ„]] โ†’ params : { params_์ด๋ฆ„ : [๊ฐ’1, ๊ฐ’2, ...] }

๐Ÿ”Ž ํด๋” ๊ตฌ์กฐ

optional
โ””โ”€โ”€ [[โ€ฆid]]
           โ””โ”€โ”€ page.tsx

๐Ÿ”Ž ์˜ˆ์ œ

type Props = { params: { id?: string[] } };

export default function Optional(props: Props) {
  const { params } = props;
  console.log("PROPS =>", props);
  return (
    <div>
      <h1>{JSON.stringify(params)}</h1>
    </div>
  );
}

๐Ÿ”Ž ๊ฒฐ๊ณผ

  1. /catchAll
  2. /catchAll/1

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€


์˜คํ”ˆ ์ฑ„ํŒ