Frontend๐ŸŽจ/Vue3.js๐Ÿ€

[Vue] Vue-Query ์ด์ •๋ฆฌ

JanuDev 2025. 1. 5. 15:50

Vueํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” vue-query(useQuery)์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

ํ•˜๋‚˜ํ•˜๋‚˜ ๋œฏ์–ด๋ณด๋Š”๊ฒƒ๋ณด๋‹จ ๋‚ด๊ฐ€ ํ‰์†Œ์— ๊ถ๊ธˆํ–ˆ๋˜ ๊ฒƒ๋“ค์— ๋‹ต์„ ํ•˜๋Š”๊ฒŒ ๋งž๋Š” ๊ฒƒ ๊ฐ™์•„์„œ.. ๊ทธ๋ ‡๊ฒŒ ํ•ด๋ณผ๋ ค ํ•œ๋‹ค.

 

Vue-Query๋Š” React์—์„œ ์‚ฌ์šฉํ•˜๋Š” React-Query๋ฅผ Vue์—์„œ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

์„œ๋ฒ„์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, Vue์—์„œ ๋น„๋™๊ธฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์บ์‹ฑํ•˜๊ณ , ๋™๊ธฐํ™” ํ•˜๋Š”๊ฑธ ๋งŒ๋“ค์–ด์ค€๋‹ค. back๋‹จ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ณ  ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค....

 

useQuery๋ž€? - SELECT์—์„œ ์‚ฌ์šฉ, ๋ฐ์ดํ„ฐ ์กฐํšŒ(GET)

๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๋ถˆ๋Ÿฌ์˜ค๊ณ , ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Vue Query์˜ ํ›…(hook).

๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋น„๋™๊ธฐ์š”์ฒญ์„ ์บก์Аํ™”, ๋กœ๋”ฉ/์„ฑ๊ณต/์‹คํŒจ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. 

  • ๋™์ผํ•œ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ณต์œ ํ•  ๋•Œ
  • ์š”์ฒญ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•˜๊ฑฐ๋‚˜, ๋‹ค์‹œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์–ด์•ผ ํ• ๋•Œ : ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ฒ—์–ด๋‚˜๊ณ  ๋Œ์•„์˜ฌ ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์š”์ฒญํ•˜๊ณ ์‹ถ์ง€ ์•Š๋‹ค๋ฉด, useQuery๊ฐ€ ์ž๋™์œผ๋กœ ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ํ˜น์€ refetch๋กœ ์ˆ˜๋™์œผ๋กœ ์š”์ฒญํ•ด๋„ ๋˜๊ณ ..
  • ์ž๋™ ์ƒˆ๋กœ๊ณ ์นจ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ : ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋Š” ์•„๋‹ˆ์ง€๋งŒ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐฑ์‹ ๋˜์•ผ ํ•  ๋•Œ(ex. ์กฐํšŒ ๋ฒ„ํŠผ, ์•Œ๋ฆผ ๋“ฑ), refetchInterval์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
useQuery(['notifications'], fetchNotifications, {
  refetchInterval: 10000, // 10์ดˆ๋งˆ๋‹ค ์ƒˆ๋กœ๊ณ ์นจ
})
  • ์š”์ฒญ ์‹คํŒจ ์‹œ ์ž๋™ ์žฌ์‹œ๋„ํ•  ๋•Œ

...์™€ ๊ฐ™์€ ์ƒํ™ฉ์ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐ˜๋Œ€๋กœ useQuery๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ƒํ™ฉ์ด ์žˆ๋‹ค. ๋ฐ”๋กœ POST, PUT, DELETE์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ, ๋ฐ์ดํ„ฐ๊ฐ€ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€ ์ƒํƒœ์ผ ๋ฟ ์„œ๋ฒ„ ํ†ต์‹ ๊ณผ ๊ด€๋ จ ์—†์„ ๋•Œ, ๊ฐ’ ๋ณ€๊ฒฝ์ด ๋นˆ๋ฒˆํ•  ๋•Œ...

๊ทธ๋Ÿผ ๋ฐ์ดํ„ฐ ์ˆ˜์ •ํ• ๋• ๋ญ˜ ์จ์•ผ ํ•˜๋ƒ?

useMutation์ด๋ž€? - INSERT, UPDATE, DELETE์—์„œ ์‚ฌ์šฉ, ๋ฐ์ดํ„ฐ ์ˆ˜์ •(POST etc.)

useMutation์€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ Vue Query์˜ ํ›…(hook)์œผ๋กœ, ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋น„๋™๊ธฐ ์ž‘์—…(POST, PUT, DELETE = insert, update, delete๋ฌธ)๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. useQuery์™€ ๋‹ค๋ฅด๊ฒŒ ์บ์‹ฑ์ด ๋˜์ง„ ์•Š๋Š”๋‹ค.

์„ฑ๊ณต, ์‹คํŒจ, ์ง„ํ–‰ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ ์ž‘์—… ํ›„ ๊ด€๋ จ๋œ ์ฟผ๋ฆฌ๋ฅผ ๋ฌดํšจํ™”(invalidateQueries)๋ฅผ ํ†ตํ•ด ํŠน์ • ๋กœ์ง์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฃผ์š” ๋ฉ”์†Œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • mutationFn : ์‹ค์ œ ๋น„๋™๊ธฐ ์ž‘์—…(API์š”์ฒญ)์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜
  • onSuccess : ์ž‘์—…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋ฌ์„ ๋•Œ ์‹คํ–‰ํ•  ์ฝœ๋ฐฑ ํ•จ์ˆ˜(ex. ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  invalidateQueries, UI์—…๋ฐ์ดํŠธ) (์ œ์ผ ๋งŽ์ด ์“ฐ์ž„!!!)
  • onError : ์ž‘์—… ์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰ํ•  ์ฝœ๋ฐฑ ํ•จ์ˆ˜
  • onSettled : ์ž‘์—… ์„ฑ๊ณต, ์‹คํŒจ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—…์‹ฑ ์‹คํ–‰ํ•  ์ฝœ๋ฐฑ ํ•จ์ˆ˜

์ œ์ผ ์ค‘์š”ํ•œ๊ฑฐ 2๊ฐœ ์•Œ์•˜์œผ๋‹ˆ ์ด ๋ฐ‘์€ ํ‰์†Œ์— ๊ถ๊ธˆํ–ˆ๋˜๊ฑฐ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•œ๋‹ค..


'์บ์‹ฑ(Cache)'์ด๋ž€

์บ์‹ฑ : ํ•œ๋ฒˆ ์—ฐ์‚ฐํ•œ ๊ฐ’์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ถœ๋ ฅํ•  ๋•Œ, ์ž์ฃผ ์“ฐ๋Š” ์ •๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์ €์žฅํ•˜๊ณ  ํ•„์š”ํ•œ ์ˆœ๊ฐ„๋งˆ๋‹ค ๋น ๋ฅด๊ฒŒ ๋ฐ›์•„์˜จ๋‹ค๋Š” ์˜๋ฏธ

๋ผ๊ณ  ํ•˜๋ฉด ์†”์งํžˆ ๋„ˆ๋ฌด ์–ด๋ ต๊ณ ....

์ž์ฃผ ์“ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋งค๋ฒˆ ์ƒˆ๋กœ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๊ณ  ๋ฏธ๋ฆฌ ์ €์žฅํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์“ฐ๋Š” ๊ฒƒ 

์ด๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.

useQuery๋Š” ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ˆœ๊ฐ„, ๋‚ด๋ถ€์— ๋ณต์‚ฌ๋ณธ์„ ์ €์žฅ(=์บ์‹œ)ํ•ด๋†“๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ์— ๋˜ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•œ๋‹ค๋ฉด ์„œ๋ฒ„์— ๋‹ค์‹œ ๋ฌผ์–ด๋ณด๋Š”๊ฒŒ ์•„๋‹Œ ์ €์žฅํ–ˆ๋˜ ๋ณต์‚ฌ๋ณธ์„ ๋ณด์—ฌ์ฃผ๋Š”๊ฒƒ!

์„œ๋ฒ„์— ๋ถˆํ•„์š”ํ•œ ์š”์ฒญ์„ ์ค„์—ฌ์ค€๋‹ค~๐Ÿ’ซ๐Ÿ’ซ

const {}์˜ ์˜๋ฏธ

Vue3.js์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค

const {data : test, refetch} = useTest()

์—ฌ๊ธฐ์„œ {} ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น(destructiong assignment)๋ผ๊ณ  ํ•œ๋‹ค. 

์œ„์—์„œ useTest()๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ, {}๋Š” ์ด ๋ฐ˜ํ™˜๋œ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๊ณจ๋ผ๋‚ธ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ฐ€์ ธ์˜จ ๊ฐ์ฒด์˜ data๋ผ๋Š” ์†์„ฑ์— ์›ํ•˜๋Š” ๊ฐ’์ด ์žˆ์œผ๋ฏ€๋กœ, ์ด ๊ฐ’์˜ ๋ณ€์ˆ˜๋ช…์„ test๋กœ ์ง“๋Š”๋‹ค.

refetch๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋ถ€๋ฅด๋Š” ์†์„ฑ์œผ๋กœ, ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๊ทธ๋Œ€๋กœ ๋ณ€์ˆ˜๋กœ ๋งŒ๋“  ๊ฒƒ์ด๋‹ค. 

queryKey๋ž€

Vue Query์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•˜๊ณ  ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ์œ ํ‚ค์ด๋‹ค. "์‹๋ณ„์ž"

  1. Vue Query๋Š” ๋™์ผํ•œ queryKey๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์บ์‹ฑํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋™์ผํ•œ queryKey๋กœ ์š”์ฒญํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ํ•˜์ง€ ์•Š๊ณ  ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  2. ํŠน์ • ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌดํšจํ™”(invaludate)ํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
const {data, isLoading} = useQuery({
    queryKey : ['user'], // ๊ณ ์œ ํ•œ ํ‚ค(๋ฐฐ์—ด ํ˜•์‹)
    queryFn : fetchUser, // ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํ•จ์ˆ˜
})

ํ˜น์€ ๊ณ ์œ ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋ ค๋ฉด(=๋ฐ์ดํ„ฐ์— key๊ฐ’์ด ํ•„์š”ํ•˜๋‹ค๋ฉด) ํ‚ค์— ์ถ”๊ฐ€๋œ ์ •๋ณด๋ฅผ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค.

const {data} = useQuery({
    queryKey : ['user', userId],
    queryFn : () => fetchUser(userId),
})

์ €๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด, userId์˜ ๊ฐ’์ด ๋‹ฌ๋ผ์งˆ ๋•Œ ๋งˆ๋‹ค user๊ฐ€ ๊ฐฑ์‹ ๋˜์„œ queryFn์„ ์‹คํ–‰ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,

// userId = 1์ธ ๊ฒฝ์šฐ
queryKey: ['user', 1]

// userId = 2์ธ ๊ฒฝ์šฐ
queryKey: ['user', 2]

ํ‚ค๊ฐ€ ๋‹ฌ๋ผ์กŒ์œผ๋ฏ€๋กœ vue-query๋Š” ์ด๊ฒƒ์„ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋กœ ์ธ์‹ํ•˜์—ฌ queryFn์„ ์ƒˆ๋กœ ์‹คํ–‰ํ•œ๋‹ค. 

  • ์ฒ˜์Œ์— userId = 1์ผ ๋•Œ, ['user', 1] ์บ์‹œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  fetchUser(1) ์‹คํ–‰
  • userId๊ฐ€ 2๋กœ ๋ณ€๊ฒฝ → ['user', 2]๋ผ๋Š” ์ƒˆ๋กœ์šด ์บ์‹œ ํ‚ค → fetchUser(2) ์‹คํ–‰
  • ๋งŒ์•ฝ ๋‹ค์‹œ userId = 1๋กœ ๋Œ์•„๊ฐ€๋ฉด? → ์ด๋ฏธ ['user', 1] ์บ์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ API๋ฅผ ์žฌํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋กœ ๋ฐ˜

queryFn์ด๋ž€

๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋กœ, ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋กœ์ง์„ ์ •์˜ํ•œ๋‹ค.

๋ฐ˜๋“œ์‹œ ๋น„๋™๊ธฐ ํ•จ์ˆ˜์—ฌ์•ผ ํ•œ๋‹ค!

queryClient๋ž€

Vue query์˜ ์ค‘์‹ฌ ๊ฐ์ฒด๋กœ, ์ฟผ๋ฆฌ ๋ฐ ์บ์‹ฑ์„ ๋“ฑ๋กํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.

๋ชจ๋“  ์ฟผ๋ฆฌ์™€ ์บ์‹œ๋ฅผ ์ „์—ญ์—์„œ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ฟผ๋ฆฌ ๋ฌดํšจํ™”, ๋ฐ์ดํ„ฐ ๊ฐ•์ œ ๊ฒฝ์‹ , ์บ์‹œ ์‚ญ์ œ ๋“ฑ์˜ ์ž‘์—… ๋ฐ ๋ฉ”์†Œ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ญ๋ผ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์ง€?

์–ธ์ œ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ฌ์ง€, ๋ฌดํšจํ™”ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์ค‘์•™๊ด€๋ฆฌ์ž, ์ฆ‰ ์‚ฌ๋ นํƒ‘ ๊ฐ™์€ ์กด์žฌ์ด๋‹ค.

์šฐ๋ฆฌ๊ฐ€ fetchํ–ˆ๋˜ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค queryClient๋ผ๋Š” ์ฐฝ๊ณ ์— ๊ฐ€๋‘๊ณ , ๋‚˜์ค‘์— ์“ฐ๊ฑฐ๋‚˜ ๋ฒ„๋ฆฌ๋Š” ๋“ฑ์„ ์ด ์นœ๊ตฌ๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค.

 

์ฃผ์š” ๋ฉ”์†Œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • invalidateQueriesโœจโœจ: "์ด๊ฑฐ ์˜ค๋ž˜๋ฌ์–ด. ๋‹ค์‹œ ๊ฐ€์ ธ์™€" = ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๊ณ  ์ œ์ผ ์ค‘์š”ํ•œ ๋ฉ”์†Œ๋“œ. ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๋ผ๊ณ  vueQuery์—๊ฒŒ ์•Œ๋ฆฌ๋Š” ๊ฒƒ. ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ insert/update/deleteํ›„ ์บ์‹œ์— ๋‚จ์€ ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„๋ฆด ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
queryClient.invalidateQueries({
  queryKey: ['ninja', ninja]
})

Vue Query์˜ ํ•ต์‹ฌ ๋ฉ”์†Œ๋“œ ์ค‘ ํ•˜๋‚˜์ด๋‹ค(์ฒด๊ฐ์ƒ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค). 

์–ด๋ ค์šด ๋ง๋กœ insert, update, delete๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ invalidateQueries๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ Vue Query์—๊ฒŒ ์บ์‹œ์— ๋‚จ์•„์žˆ๋Š” ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋”์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š์œผ๋‹ˆ ๋‹ค์‹œ ๋กœ๋”ฉํ•˜๋ผ๊ณ (= refetchํ•˜๋ผ๊ณ ) ์•Œ๋ ค์ค€๋‹ค. 

โžก๏ธ ['ninja', ninja] ์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Vue Query๊ฐ€ “์ด๊ฑฐ์ด๊ฑฐ ์•„์ฃผ ์˜ค๋ž˜๋ฌ๊ตฌ๋งŒ” ํ•˜๊ณ  ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค.

  • refetchQueries : "์ง€๊ธˆ ๋‹น์žฅ ๋‹ค์‹œ ๊ฐ€์ ธ์™€๋ผ" = ์ฟผ๋ฆฌ๋ฅผ ๊ฐ•์ œ๋กœ ๋‹ค์‹œ ๊ฐ€์ ธ์˜จ๋‹ค. ์‹ค์‹œ๊ฐ„ ๋ฐ˜์‘์ด ์ค‘์š”ํ•  ๋•Œ, invalidateQueries๋กœ๋Š” ํƒ€์ด๋ฐ์ด ๋Šฆ์„๊นŒ๋ด ์ฆ‰์‹œ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
queryClient.refetchQueries({
  queryKey: ['ninja', ninja]
})

์บ์‹œ๋Š” ์œ ํšจํ•˜์ง€๋งŒ ๊ทธ๋ž˜๋„ ๋‹ค์‹œ fetchํ•˜๊ณ  ์‹ถ์„ ๋•Œ. ์บ์‹œ๊ณ  ๋ญ๊ณ  ํ•„์š” ์—†๋‹ค. ๋‹น์žฅ ์„œ๋ฒ„์—์„œ ์‹ฑ์‹ฑํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ๋ ค์˜ค๋А๋‹ˆ๋ผ 

๊ฐ™์€ ๋А๋‚Œ์ด๋‹ค. ์„œ๋ฒ„์˜ fetchํ•จ์ˆ˜๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰๋œ๋‹ค.

 

invalidate๊ฐ€ "๋‹ค์Œ์— ๋‹ค์‹œ ๊ฐ€์ ธ์™€~"๋ฉด refetch๋Š” "์•ผ ์ง€๊ธˆ ๋‹น์žฅ ๊ฐ€์ ธ์™€. ์•ˆ๊ฐ€์ ธ์™€?"์˜ ๋А๋‚Œ

  • setQueryData : "๋ฐ์ดํ„ฐ ๋‚ด๊ฐ€ ์ง์ ‘ ๊ณ ์น ๊ฑฐ๋‹ˆ๊นŒ ๋น„์ผœ" =  ์„œ๋ฒ„์—์„œ ๊ฐ’์„ ๋‹ค์‹œ ๋ฐ›๋Š”๊ฒŒ ์•„๋‹Œ ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ์ง์ ‘ ์บ์‹œ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.

'Frontend๐ŸŽจ > Vue3.js๐Ÿ€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

toValue()์™€ toRaw() (feat. MaybeRefOrGetter<T>, Proxy)  (0) 2025.10.02
[Vue] watch์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž  (0) 2024.12.29