๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Frontend/TanStack Query

Query Options

queryKey์™€ queryFn์„ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๊ณต์œ ํ•˜๋ฉด์„œ๋„ ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ํ•œ ๊ณณ์— ๋ชจ์•„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” queryOptions helper๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋Ÿฐํƒ€์ž„ ์‹œ ์ด ํ—ฌํผ๋Š” ์ „๋‹ฌ๋ฐ›์€ ์˜ต์…˜ ๊ฐ์ฒด๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•  ๋ฟ์ด์ง€๋งŒ, TypeScript์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ์ˆ˜๋งŽ์€ ์ด์ ์„ ์ œ๊ณตํ•œ๋‹ค. ์ฟผ๋ฆฌ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์˜ต์…˜์„ ํ•œ ๊ณณ์—์„œ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด type inference(ํƒ€์ž… ์ถ”๋ก )๊ณผ type safety(ํƒ€์ž… ์•ˆ์ •์„ฑ)์„ ์™„๋ฒฝํ•˜๊ฒŒ ๋ณด์žฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

import { queryOptions } from '@tanstack/react-query'

function groupOptions(id: number) {
  return queryOptions({
    queryKey: ['groups', id],
    queryFn: () => fetchGroups(id),
    staleTime: 5 * 1000,
  })
}

useQuery(groupOptions(1))
useSuspenseQuery(groupOptions(5))
useQueries({
  queries: [groupOptions(1), groupOptions(2)],
})
queryClient.prefetchQuery(groupOptions(23))
queryClient.setQueryData(groupOptions(42).queryKey, newGroups)

 

๋ฌดํ•œ ์ฟผ๋ฆฌ(Infinite Queries)๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋ณ„๋„์˜ infiniteQueryOptions helper๊ฐ€ ์ œ๊ณต๋œ๋‹ค.

 

์ปดํฌ๋„ŒํŠธ ๋‹จ์—์„œ ์ผ๋ถ€ ์˜ต์…˜์„ ์žฌ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋งค์šฐ ํ”ํ•˜๊ณ  ์œ ์šฉํ•œ ํŒจํ„ด์€ ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ ํ•„์š”์— ๋งž๊ฒŒ select ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

// ํƒ€์ž… ์ถ”๋ก ์€ ์—ฌ์ „ํžˆ ๋™์ž‘ํ•œ๋‹ค.
// query.data์˜ ํƒ€์ž…์€ queryFn์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์ด ์•„๋‹ˆ๋ผ select ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์ด ๋œ๋‹ค.
const query = useQuery({
  ...groupOptions(1),
  select: (data) => data.groupName,
})

 

https://tanstack.com/query/latest/docs/framework/react/guides/query-options

 

Query Options | TanStack Query React Docs

One of the best ways to share queryKey and queryFn between multiple places, yet keep them co-located to one another, is to use the queryOptions helper. At runtime, this helper just returns whatever yo...

tanstack.com

 

'Frontend > TanStack Query' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Parallel Queries  (0) 2025.11.03
Network Mode  (0) 2025.10.24
Query Functions  (0) 2025.10.22
Query Keys  (0) 2025.10.21
Queries  (0) 2025.10.20