๐Ÿ” React์˜ Query String

Yeonnยท2025๋…„ 3์›” 6์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
2/2
post-thumbnail

โœ… React์˜ Query String ํ™œ์šฉํ•˜์—ฌ ์ƒํƒœ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ

Query String( ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง )์€ URL์˜ ํ•œ ๋ถ€๋ถ„์œผ๋กœ ์š”์ฒญํ•˜๊ณ ์ž ํ•˜๋Š” URL์˜ ๋ถ€๊ฐ€ ์ •๋ณด๋ฅผ ํฌํ•จ ํ• ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฒ€์ƒ‰์ด๋‚˜ ์ •๋ ฌ ๋“ฑ ํŠน์ • ํ˜•ํƒœ์˜ ์ •๋ณด๋ฅผ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

https://www.example.com/products?sort=latest

Query String: key=value ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„

  • key=value ํŽ˜์–ด์˜ ๊ฐœ์ˆ˜ ์ œํ•œ ์—†์Œ
  • ?: ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์˜ ์‹œ์ž‘ ํ‘œ์‹œ
  • &: key=value ํŽ˜์–ด ๊ตฌ๋ถ„ ํ‘œ์‹œ( separator )

react-router-dom์—์„œ๋Š” ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์˜ ๊ฐ’์„ ํŽธํ•˜๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” hook๋“ค์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•ด์ค€๋‹ค.

โœ”๏ธ useLocation

ํ˜„์žฌ Location ๊ฐ์ฒด, ์ฆ‰ ํ˜„์žฌ URL์— ํฌํ•จ๋œ pathname, search ๋“ฑ์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

import { useLocation } from 'react-router-dom';

  const location = useLocation();
  const queryString = location.search;  //?sort=latest

โœ”๏ธ useSearchParams

์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์˜ ๊ฐ’์„ ์ด์šฉํ•ด URLSearchParams ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.
URLSearchParams ๊ฐ์ฒด๋Š” ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์—์„œ ์›ํ•˜๋Š” ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
useSearchParams๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ˜ธ์ถœํ•œ๋‹ค.

const [searchParams, setSearchParams] = useSearchParams();
  • searchParams.get(key): ํŠน์ •ํ•œ key์˜ value๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ
  • searchParams.getAll(key): ํŠน์ •ํ•œ key์˜ ๋ชจ๋“  value๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ, ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๋ฆฌํ„ด
//ex) ?sort=popular&sort=latest
searchParams.get("sort") // "popular"
searchParams.getAll("sort") // ["popular","latest"]
  • searchParams.toString(): ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์˜ ๊ฐ’์„ string ํ˜•ํƒœ๋กœ ๊ทธ๋Œ€๋กœ ๋ฆฌํ„ด
//ex) ?sort=latest&color=white
searchParams.toString() // "?sort=latest&color=white"
  • searchParams.set(key, value): ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ key ๊ฐ’์„ value๋กœ ์„ค์ •
    - ๋งŒ์•ฝ ๋™์ผํ•œ key์— ์ด๋ฏธ value๊ฐ€ ์žˆ์—ˆ์„ ๊ฒฝ์šฐ ์„ค์ •ํ•œ ๊ฐ’ ์™ธ์—๋Š” ์‚ญ์ œ
searchParams.set("sort", "oldest")
searchParams.toString() // "?sort=oldest"
  • searchParams.append(key, value): ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ key ๊ฐ’์„ value๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฉ”์„œ๋“œ
    • ๊ธฐ์กด์˜ ๊ฐ’๋“ค์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ์ถ”๊ฐ€
searchParams.append("sort", "latest")
searchParams.toString() // sort=oldest&sort=latest"
  • searchParams.delete(key): ํ•ด๋‹น ํ‚ค์˜ ํŒŒ๋žŒ์Šค ์‚ญ์ œ
  • searchParams.has(key): ํŠน์ • key๊ฐ€ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  boolean ๊ฐ’ ๋ฐ˜ํ™˜
  • searchParams.keys(): ๋ชจ๋“  key๋ฅผ ์ˆœํšŒํ•˜๋Š” Iterator ๋ฐ˜ํ™˜
for (const key of searchParams.keys()) {
  console.log(key);
}
// "sort", "color", "page" ๋“ฑ
  • searchParams.values(): ๋ชจ๋“  value๋ฅผ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋Š” Iterator๋ฅผ ๋ฐ˜ํ™˜
  • searchParams.entries(): ๋ชจ๋“  key-value ์Œ์„ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋Š” Iterator ๋ฐ˜ํ™˜
for (const [key, value] of searchParams.entries()) {
  console.log(`${key}: ${value}`);
}
// sort: latest
// color: white
// page: 1
  • searchPars.sort(): ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

0๊ฐœ์˜ ๋Œ“๊ธ€