๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป DEV/NextJS

[Next JS] queryString

by Rising Oneโ˜… 2025. 8. 27.
728x90
๋ฐ˜์‘ํ˜•
SMALL

 

 

  1. QueryString

 


๋ฐฉ๋ฒ•

  1. QueryString

'?q=ํ•œ์ž…' ์š”๋Ÿฐ ์‹์œผ๋กœ ์ „๋‹ฌ๋˜๋Š” ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์„ ์ด ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ดค๋‹ค.

 

์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์˜ ๊ฒฝ์šฐ์—๋Š” ์ด๋ ‡๊ฒŒ ๊ฒฝ๋กœ ๋์— ๋ฌผ์Œํ‘œ์™€ ํ•จ๊ป˜ ๋ช…์‹œ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์šฐํŒ…์—๋Š” ์ „ํ˜€ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์•„์š”

=> ๊ทธ๋ž˜์„œ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ๋ณ„๋„๋กœ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์„ ์œ„ํ•ด ํด๋” ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์„ ๊บผ๋‚ด ์“ฐ๋ ค๋ฉด App Router ๋ฐฉ์‹์—์„œ๋Š” ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ Props๋ฅผ ํ†ตํ•ด ๊บผ๋‚ด ์“ด๋‹ค.

=> App Router์˜ Next ์•ฑ์—์„œ๋Š” ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์ด๋‚˜ URL ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๊ฐ™์€ ๊ฒฝ๋กœ์ƒ์— ํฌํ•จ๋˜๋Š” ๊ฐ’๋“ค์€ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ๋ชจ๋‘ props๋กœ์จ ์ „๋‹ฌ์ด ๋œ๋‹ค.

 

props๋ฅผ ๋ฐ›์•„์™€์„œ console.log() ๋กœ ์ถœ๋ ฅ์„ ํ•ด์ฃผ๋ฉด,

- searchParams: Promise { } : searchParams๋ผ๋Š” ๊ฐ’์ด Promise ๊ฐ์ฒด๋กœ ์ €์žฅ ๋ผ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธ O

- params: Promise { } : url ํŒŒ๋ผ๋ฏธํ„ฐ์ธ params์˜ ๊ฐ’๋„ Promise ๊ฐ์ฒด๋กœ ์ €์žฅ ๋ผ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธ O

 

props๋กœ ์ „๋‹ฌ์ด ๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ๋“ค์„ ๊บผ๋‚ด์„œ ํ™œ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, => ํƒ€์ž… ์ •์˜๋ถ€ํ„ฐ!

(ex)

1. page.tsx ์ปดํฌ๋„ŒํŠธ์˜ props๋กœ "searchParams" ๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๋Š”๋ฐ,

2. "searchParams"์˜ ํƒ€์ž…์€? => Promise ๊ฐ์ฒดํ˜•ํƒœ!

3. ๊ทธ ์•ˆ์—๋Š” q:string ์ด๋ผ๋Š” ๊ฒฐ๊ณผ ๊ฐ’์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

# 1. props ํƒ€์ž… ์ •์˜

export default function Page({ searchParams }:{ searchParams:Promise<{q:string}> }) {
  return (
    <div>
      search ํŽ˜์ด์ง€
    </div>
  );
}

// { searchParams } ๋ผ๋Š” ๊ฐ’์€ { searchParams:Promise } Promise๋ผ๋Š” ๊ฐ์ฒดํ˜•ํƒœ์ด๊ณ 
// ๊ทธ ์•ˆ์— <{q:string}>์ด๋ผ๋Š” ๊ฒฐ๊ณผ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

-----

#2. ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์œผ๋กœ q ๊บผ๋‚ด์˜ค๊ธฐ

export default function Page({ searchParams }:{ searchParams:Promise<{q:string}> }) {
  
  const { q } = await searchParams; 
  // ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์„ ์ด์šฉํ•ด์„œ await search params๋กœ๋ถ€ํ„ฐ ์ด q๋ผ๋Š” ๊ฐ’์„ ๊บผ๋‚ด์˜ค๋„๋ก ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค
  
  return (
    <div>
      search ํŽ˜์ด์ง€: {q}
    </div>
  );
}

-----

# 3. async ์ถ”๊ฐ€ + { q } ์‚ฌ์šฉ

export default async function Page({ searchParams }:{ searchParams:Promise<{q:string}> }) {
  const { q } = await searchParams; 

  return (
    <div>
      search ํŽ˜์ด์ง€: {q}
    </div>
  );
}

 

 

+ ์–ด๋–ป๊ฒŒ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์— async๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

=> ๋ฆฌ์•กํŠธ์˜ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์ด๊ธฐ์— ๊ฐ€๋Šฅ!

=> ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋Š”, ์„œ๋ฒ„ ์ธก์—์„œ ์‚ฌ์ „ ๋ Œ๋”๋ง์„ ์œ„ํ•ด์„œ ๋”ฑ 1๋ฒˆ ์‹คํ–‰์ด ๋˜๊ธฐ์— ๊ทธ ์‹œ์ ์— ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋ผ๋„ ๋ฌธ์ œX

(์ถ”ํ›„ ๋ณด๊ฐ•)

728x90
๋ฐ˜์‘ํ˜•
LIST

๋Œ“๊ธ€