Skip to content

kyoung2log/TanstackQuery

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

47 Commits
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

README

์ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” Tanstack Query ๊ณต์‹๋ฌธ์„œ๋ฅผ ํ†บ์•„๋ณด๊ณ  ์•Œ๊ฒŒ๋œ ์ ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ‘€ ๊ณต์‹๋ฌธ์„œ ์ฝ์œผ๋ฉด์„œ ์•Œ๊ฒŒ๋œ ์ 

์ „์ฒด์ ์œผ๋กœ ๋ฐฐ์šด ๊ฒƒ

  • ์˜์–ด ๋ฌธ์„œ๋ฅผ ์ฝ๋Š” ๋ฐฉ๋ฒ•... ์•„์ง ์™„์ „ํ•˜์ง„ ์•Š์ง€๋งŒ ๊ณ„์† ๋„์ „ํ•ด์•ผ๊ฒ ๋‹ค.
  • ๊ณต์‹๋ฌธ์„œ๊ฐ€ ์ง„~์งœ ์นœ์ ˆํ•˜๋‹ค๋Š” ๊ฒƒ.. '์ด ์ •๋„๊นŒ์ง€ ๊ณ ๋ คํ•œ๋‹ค๊ณ ?' ์‹ถ์„ ๋งŒํผ, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ์ œ๊ณตํ•œ๋‹ค. ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ๋งŽ์€ ์ด์œ ๋ฅผ ์•Œ๊ฒ ์Œ
  • ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ, ์„œ๋น„์Šค์˜ ์š”๊ตฌ์‚ฌํ•ญ์ด ํŒจํ‚ค์ง€์— ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”์ง€ ์•„๋‹Œ์ง€ ํ™•์ธํ•˜๋ฉด์„œ ์„ ํƒํ•ด์•ผ๊ฒ ๋‹ค. ๊ทธ๋Ÿฌ๋ ค๋ฉด ์˜์–ด๋ฅผ ์ž˜ํ•ด์„œ ๊ณต์‹๋ฌธ์„œ๋ฅผ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ค„ ์•Œ์•„์•ผ๊ฒ ์ง€..

GUIDES & CONCEPTS

  • important defaults ์บ์‹ฑ์ด ๋œ๋‹ค ์ •๋„๋งŒ ์•Œ์•˜์ง€, ์–ด๋А ๊ฒฝ์šฐ์— ์˜ค๋ž˜๋œ ์ƒํƒœ๋กœ ์ทจ๊ธ‰ํ•˜๋Š”์ง€์™€ inactive ์ƒํƒœ๋กœ ์ „ํ™˜ ๋’ค 5๋ถ„ ๋’ค ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์˜ ๋Œ€์ƒ(์บ์‹œ์—์„œ ์‚ญ์ œ)์ด ๋œ๋‹ค.

  • important defaults 5๋ถ„๊ฐ„ ์บ์‹ฑ์ด๋ผ๋Š”๋ฐ, ํ•œ 60๋ถ„ ์บ์‹ฑํ•˜๋ฉด ์„ฑ๋Šฅ์ด ์•ˆ์ข‹์•„์งˆ๊นŒ ?

  • queries ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์š”์ฒญ์˜ ๊ฒฝ์šฐ ๋ฎคํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด๋ผ... ๋ผ๋Š”๊ฑธ ๊ณต์‹๋ฌธ์„œ์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

  • queries fetchStatus๊ฐ€ ์žˆ๋Š”๊ฒƒ๋„ ์ฒจ ์•Œ์•˜๋Š”๋ฐ ์ด๊ฑฐ๋กœ ์ƒํƒœ๋ฅผ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค๋‹ˆ ์‹ ๊ธฐ. ํŠนํžˆ status๋Š” ๋ฐ์ดํ„ฐ์˜ ์ƒํƒœ๋ฅผ, fetchStatus๋Š” queryFn์˜ ์‹คํ–‰ ์ƒํƒœ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

  • query keys ์ฟผ๋ฆฌํ‚ค ๋ฐฐ์—ด ์ˆœ์„œ๋Š” ์ค‘์š”ํ•˜์ง€๋งŒ ๊ฐ์ฒด ๋‚ด๋ถ€ ์š”์†Œ๋Š” ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค.

  • query functions ์ฟผ๋ฆฌ ํ•จ์ˆ˜์— QueryFunctionContext๊ฐ€ ์ž๋™์œผ๋กœ ๊ฐ™์ด ์ „๋‹ฌ๋œ๋‹ค.

  • query options ๋™์ผํ•œ ์ฟผ๋ฆฌ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ ๊ตฐ๋ฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ(ex. useQuery, useSuspenseQuery, useQueries ๋“ฑ) ์ฟผ๋ฆฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๊ด€์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • parallel queries ๊ธฐ๋ณธ์ ์œผ๋กœ useQuery์˜ ์š”์ฒญ์ด ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋จ. ๊ทธ๋ฆฌ๊ณ  useQueries๊ฐ€ ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์š”์ฒญํ•˜๋Š” ํ›…์ด๊ตฌ๋‚˜ ๋ผ๋Š”๊ฑธ ์•Œ๊ฒŒ๋จ(๊ทธ๋™์•ˆ์€ useQuery์™€ ์ฐจ์ด์ ์ด ๋ญ์ง€ ํ–ˆ์—ˆ์Œ)

  • background fetching indicators useIsFetching๋ผ๋Š” ํ›…์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ fetching ๋ฐ›๋Š”์ค‘์ธ์ง€ ์•„๋‹Œ์ง€์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ.. ์–˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊นƒํ—ˆ๋ธŒ ํ”„๋กœ๊ทธ๋ ˆ์Šค๋ฐ”๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์šฉ์ดํ•  ๊ฒƒ ๊ฐ™๋‹ค. ์ง์ ‘ ์‚ฌ์šฉํ•ด๋ด์•ผ ์•Œ๊ฒ ์ง€๋งŒ..!

  • disabling/pausing queries isLoading === isPending && isFetching ๋ผ๋Š” ๊ฒƒ

  • disabling/pausing queries skipToken์„ ์‚ฌ์šฉํ•ด์„œ ์š”์ฒญํ•˜๋ฉด enable์„ ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ๋ณด๋‹ค ๋ช…ํ™•ํ•œ ํƒ€์ž… ์ง€์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๊ณ , ์ด ๊ฒฝ์šฐ๋Š” refetch์—์„œ ๋™์ž‘ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด ์•„์˜ˆ ์ฟผ๋ฆฌ๋ฅผ "์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ" ๋‹ค๋ฃจ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋จ

  • invalidations from mutations ๋ฎคํ…Œ์ด์…˜์˜ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค...! ๊ทธ๊ฐ„ ํ•„์š”ํ• ๋•Œ๋งˆ๋‹ค ๊ฒ€์ƒ‰ํ•ด์„œ ์ฝ”๋“œ ๊ธ์–ด์™”๋Š”๋ฐ... ํ‘..

  • updates from mutation responses ๋ฎคํ…Œ์ด์…˜ ์‹คํ–‰ ํ›„ ์ฟผ๋ฆฌ๋ฌดํšจํ™” + ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์—†์ด ๋ฎคํ…Œ์ด์…˜ ์‘๋‹ต ๊ฐ์ฒด๋กœ ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒํ™ฉ์— ๋”ฐ๋ผ invalidateQueries์™€ setQueryData์˜ ์‚ฌ์šฉ์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•  ๋“ฏ ํ•˜๋‹ค.

  • Optimistic Updates : ๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ์‹๊ณผ ๊ฐ๊ฐ ์–ด๋””์— ์จ์•ผ ์ข‹์€์ง€์— ๋Œ€ํ•ด ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค.

  • Performance & Request Waterfalls : ๋Œ€๋ง์˜ ์„ฑ๋Šฅ์ตœ์ ํ™”.. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” 4๊ฐ€์ง€ ํ˜•ํƒœ(์ผ๋ฐ˜, ๋ณ‘๋ ฌ, ์ค‘์ฒฉ, ์ฝ”๋“œ๋ถ„ํ• )์˜ ์š”์ฒญ ์›Œํ„ฐํ’€์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค. ๋˜๊ฒŒ ์ค‘์š”ํ•œ ํŒŒํŠธ๋ผ ๋ฐ˜๋ณตํ•ด์„œ ๊ณฑ์”น์œผ๋ฉด ์ข‹์„ ๋“ฏ ํ•˜๋‹ค.

  • Prefetching & Router Integration : ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ Prefetching ๊ธฐ๋ฒ•๊ณผ prefetch๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์บ์‹œ์— ์ฑ„์›Œ์ง€๋Š”์ง€์™€, ์ด ๊ณผ์ •์—์„œ์˜ ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ด์Šˆ์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

  • Server Rendering & Hydration : ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ ๊ธฐ์ ˆํ•œ ํŒŒํŠธ. SSR๊ณผ CSR์˜ ์ฟผ๋ฆฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋”ฐ๋กœ์žˆ๊ณ , ์—ฌ๊ธฐ์„œ prefetch๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์„ ๋•Œ ์ฟผ๋ฆฌ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ , ๋ Œ๋”๋ง์„ ์„ฑ๋Šฅ ์ด์Šˆ๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

  • Render Optimizations : ํƒ„์Šคํƒ ์ฟผ๋ฆฌ๊ฐ€ ์ตœ์ ํ™”๋ฅผ ์ ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Œ. ์ฝ”๋“œ๋ฅผ ๊นŒ๋ณด๋ฉด์„œ ๊ฐ™์ด ์ฝ์–ด๋ด๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

    • ๊ตฌ์กฐ์  ๊ณต์œ  : ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•  ๋•Œ ๊ตฌ์กฐ์  ๋น„๊ต๋ฅผ ํ•˜๊ณ , ๋ฐ”๋€๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ดํŠธํ•จ
    • ์ฐธ์กฐ ์ •์ฒด์„ฑ : useSyncExternalStore๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ์ €์žฅ์†Œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๋ณ€ํ™”๋ฅผ ํƒ์ง€ํ•จ. ํšจ์œจ์„ฑ์„ ์œ„ํ•ด ๋‚ด๋ถ€ ์ฐธ์กฐ๊ฐ’์€ ์œ ์ง€ํ•˜๋ฉด์„œ, ์ตœ์ƒ์œ„ ๊ฐ์ฒด๋งŒ ์ƒˆ๋กœ์šด ์ฐธ์กฐ๊ฐ’์„ ๋„˜๊ธฐ๋ฉฐ ๊ตฌ์กฐ์  ๊ณต์œ ๋ฅผ ์ˆ˜ํ–‰
    • useQuery๋กœ๋ถ€ํ„ฐ ๋ฆฌํ„ด๋œ ์†์„ฑ ์ค‘ ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๋ถ„๋งŒ ํŠธ๋ž˜ํ‚น ํ•จ

๐Ÿ™‡โ€โ™€๏ธ REF

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published