Skip to main content
useListParams๋Š” ๋ชฉ๋ก ํŽ˜์ด์ง€์˜ ํ•„ํ„ฐ๋ง, ์ •๋ ฌ, ํŽ˜์ด์ง€๋„ค์ด์…˜ ์ƒํƒœ๋ฅผ URL ๊ฒ€์ƒ‰ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋™๊ธฐํ™”ํ•˜๋Š” ํ›…์ž…๋‹ˆ๋‹ค. ๋ถ๋งˆํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ํƒ€์ž… ์•ˆ์ „ํ•œ ํผ ๋ฐ”์ธ๋”ฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ธฐ๋Šฅ

URL ๋™๊ธฐํ™”

๊ฒ€์ƒ‰ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ URL์— ์ €์žฅ๋ถ๋งˆํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ

ํƒ€์ž… ์•ˆ์ „

Zod ์Šคํ‚ค๋งˆ ๊ธฐ๋ฐ˜์ž๋™ ํƒ€์ž… ์ถ”๋ก 

์ž๋™ ํŽ˜์ด์ง€ ๋ฆฌ์…‹

ํ•„ํ„ฐ ๋ณ€๊ฒฝ ์‹œ 1ํŽ˜์ด์ง€๋กœ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„ 

register ํŒจํ„ด

ํผ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ํŽธ ์—ฐ๊ฒฐ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ œ๊ฑฐ

๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

Import ๋ฐ ์ดˆ๊ธฐํ™”

ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค๋ช…:
  • UserListParams: Zod ์Šคํ‚ค๋งˆ (์ž๋™ ์ƒ์„ฑ๋จ)
  • ๊ธฐ๋ณธ๊ฐ’ ๊ฐ์ฒด: URL์— ๊ฐ’์ด ์—†์„ ๋•Œ ์‚ฌ์šฉํ•  ์ดˆ๊ธฐ๊ฐ’
์™œ Zod ์Šคํ‚ค๋งˆ๊ฐ€ ํ•„์š”ํ•œ๊ฐ€์š”?URL ๊ฒ€์ƒ‰ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ, ์ˆซ์ž๋‚˜ boolean์œผ๋กœ ํŒŒ์‹ฑํ•˜๋ ค๋ฉด ์Šคํ‚ค๋งˆ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. UserListParams๋Š” sonamu.generated.ts์— ์ž๋™ ์ƒ์„ฑ๋˜๋ฉฐ, ๋ฐฑ์—”๋“œ์˜ ํƒ€์ž… ์ •์˜์™€ ํ•ญ์ƒ ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

listParams ์‚ฌ์šฉ

ํ˜„์žฌ ํ•„ํ„ฐ๋ง ์ƒํƒœ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
ํƒ€์ž…:

setListParams๋กœ ์ƒํƒœ ๋ณ€๊ฒฝ

ํ•„ํ„ฐ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  URL์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
๋™์ž‘:
  1. listParams์™€ newParams๋ฅผ deep equal ๋น„๊ต
  2. ๋ณ€๊ฒฝ์ด ์žˆ์œผ๋ฉด TanStack Router์˜ navigate๋กœ URL ์—…๋ฐ์ดํŠธ
  3. URL ๋ณ€๊ฒฝ โ†’ useSearch ํ›… ์žฌ์‹คํ–‰ โ†’ listParams ์ž๋™ ๊ฐฑ์‹ 
์ฃผ์˜: ํ•ญ์ƒ spread operator ์‚ฌ์šฉ
๊ธฐ์กด ํ•„ํ„ฐ ๊ฐ’์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ spread operator๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

register๋กœ ํผ ๋ฐ”์ธ๋”ฉ

register ํ•จ์ˆ˜๋Š” ํผ ์ปดํฌ๋„ŒํŠธ์— value์™€ onValueChange๋ฅผ ์ž๋™์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
register๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ’:
์ž๋™ ํŽ˜์ด์ง€ ๋ฆฌ์…‹์˜ ์ด์œ : ์‚ฌ์šฉ์ž๊ฐ€ 3ํŽ˜์ด์ง€์—์„œ ๊ฒ€์ƒ‰์–ด๋ฅผ ๋ฐ”๊พธ๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ์ ์–ด์„œ 3ํŽ˜์ด์ง€๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ page๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํ•„ํ„ฐ ๋ณ€๊ฒฝ ์‹œ ์ž๋™์œผ๋กœ 1ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

์‹ค์ „ ์˜ˆ์ œ

์™„์ „ํ•œ ๋ชฉ๋ก ํŽ˜์ด์ง€

์ปค์Šคํ…€ ํ•„ํ„ฐ ์ถ”๊ฐ€

๋ฐฑ์—”๋“œ์—์„œ ์ปค์Šคํ…€ ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ ๊ฒฝ์šฐ:
ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์‚ฌ์šฉ:

URL ๊ณต์œ  ๋ฐ ๋ถ๋งˆํฌ

useListParams์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ํ•„ํ„ฐ ์ƒํƒœ๊ฐ€ URL์— ์ €์žฅ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ถ๋งˆํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์˜ ์ด์ :
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ํ•„ํ„ฐ ์กฐํ•ฉ์„ ๋ถ๋งˆํฌ
  • URL์„ ๊ณต์œ ํ•˜์—ฌ ๋™๋ฃŒ์—๊ฒŒ ๋™์ผํ•œ ๋ทฐ ์ „๋‹ฌ
  • ๋ธŒ๋ผ์šฐ์ € ๋’ค๋กœ๊ฐ€๊ธฐ/์•ž์œผ๋กœ๊ฐ€๊ธฐ๋กœ ํ•„ํ„ฐ ํžˆ์Šคํ† ๋ฆฌ ํƒ์ƒ‰

์˜ต์…˜

disableSearchParams

URL ๋™๊ธฐํ™”๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ๋กœ์ปฌ ์ƒํƒœ๋กœ๋งŒ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ ์ผ€์ด์Šค:
  • ๋ชจ๋‹ฌ ์•ˆ์˜ ๋ชฉ๋ก (URL์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๋•Œ)
  • ์ž„๋ฒ ๋””๋“œ ์œ„์ ฏ (๋…๋ฆฝ์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ)
  • ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ
disableSearchParams: true๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ถ๋งˆํฌ์™€ URL ๊ณต์œ  ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํƒ€์ž… ์•ˆ์ „์„ฑ

์ปดํŒŒ์ผ ํƒ€์ž„ ๊ฒ€์ฆ

์ž๋™ ์™„์„ฑ

IDE์—์„œ register(" ์ž…๋ ฅ ์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํ•„๋“œ๊ฐ€ ์ž๋™ ์™„์„ฑ๋ฉ๋‹ˆ๋‹ค.

TanStack Router ํ†ตํ•ฉ

useListParams๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ TanStack Router์˜ ํ›…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:
  • useSearch: URL ๊ฒ€์ƒ‰ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฝ๊ธฐ
  • useNavigate: URL ์—…๋ฐ์ดํŠธ
strict: false์˜ ์˜๋ฏธuseSearch({ strict: false })๋Š” ํ˜„์žฌ ๋ผ์šฐํŠธ์— ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒ€์ƒ‰ ํŒŒ๋ผ๋ฏธํ„ฐ๋„ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋™์ ์œผ๋กœ ์ถ”๊ฐ€๋˜๋Š” ํ•„ํ„ฐ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์˜์‚ฌํ•ญ

1. ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •

ํ•„์ˆ˜ ํ•„๋“œ:
  • num: ํŽ˜์ด์ง€๋‹น ํ•ญ๋ชฉ ์ˆ˜
  • page: ํ˜„์žฌ ํŽ˜์ด์ง€ (1๋ถ€ํ„ฐ ์‹œ์ž‘)

2. Enum ํ•„๋“œ์˜ ํƒ€์ž… ๋‹จ์–ธ

3. register์™€ ์ปค์Šคํ…€ onChange ํ•จ๊ป˜ ์‚ฌ์šฉ

๊ด€๋ จ ๋ฌธ์„œ