π‘ ν΅μ¬ μμ½
React μ μ© λΌμ΄λΈλ¬λ¦¬μμ νλ μμν¬ λ²μ© μνκ³(TanStack)λ‘ νμ₯λμμ΅λλ€. v5λ λ¬Έλ²μ λ¨μΌν(κ°μ²΄ νν κ°μ ), μ½λ°± μ΅μ μ κ±°, λ€μ΄λ° κ°μ , Suspense μ μ© ν μΆκ°λ₯Ό ν΅ν΄ νμ μ€ν¬λ¦½νΈ μΉνμ±κ³Ό μμΈ‘ κ°λ₯μ±μ λν ν₯μμμΌ°μ΅λλ€.
| νλͺ© | React Query v3 | TanStack Query v5 | λΉκ³ |
|---|---|---|---|
| ν¨ν€μ§λͺ | react-query |
@tanstack/react-query |
ν¨ν€μ§ μ¬μ€μΉ λ° import κ²½λ‘ μμ νμ |
| μ§μ νκ²½ | React μ μ© | React, Vue, Svelte λ± | νλ μμν¬μ ꡬμ λ°μ§ μλ λ²μ© λΌμ΄λΈλ¬λ¦¬λ‘ μ§ν |
| Query Key | λ¬Έμμ΄ λλ λ°°μ΄ ('todos') |
무쑰건 λ°°μ΄ (['todos']) |
ν€ κ΄λ¦¬μ μΌκ΄μ± ν보 |
λ μ΄μ ν μ μΈμλ‘ λ¬Έμμ΄, μ½λ°± ν¨μ, μ΅μ μ μμ΄μ μΈ μ μμ΅λλ€. μ€μ§ λ¨μΌ κ°μ²΄(Object) ννλ‘λ§ μ λ¬ν΄μΌ ν©λλ€.
TypeScript
`// β v3 (v5μμλ μλ¬ λ°μ) useQuery('todos', fetchTodos, { enabled: true });
// β v5 (λ¨μΌ κ°μ²΄ ννλ‘ ν΅μΌ) useQuery({ queryKey: ['todos'], queryFn: fetchTodos, enabled: true, });`
useQuery μ½λ°± ν¨μ μμ μ κ±° (κ°μ₯ ν° λ³ν)β οΈ
useQueryλ΄λΆμ μλonSuccess,onError,onSettledμ΅μ μ΄ μμ ν μ κ±°λμμ΅λλ€. (λ¨,useMutationμλ κ·Έλλ‘ μ μ§λ©λλ€.)
select μ΅μ
μ¬μ©useEffectλ₯Ό μ¬μ©νκ±°λ, μ μ QueryCache / MutationCache λ¨μμ μ²λ¦¬cacheTime β‘οΈ gcTime
status === 'loading' β‘οΈ status === 'pending'
PendingμΌλ‘ λΆλ¦
λλ€. (isPending νλκ·Έ μ¬μ©)isLoadingμ isFetching && isPending μνλ₯Ό μλ―Ένλ κ²μΌλ‘ μ’νμ‘μ΅λλ€.κΈ°μ‘΄μ { suspense: true } μ΅μ
μ μ κ±°νκ³ , νμ
μμ μ±μ΄ 보μ₯λλ λ³λμ ν
μΌλ‘ λΆλ¦¬λμμ΅λλ€. ν΄λΉ ν
μ μ¬μ©νλ©΄ λ°νλλ dataκ° undefinedκ° μλμ νμ
μ€ν¬λ¦½νΈκ° 보μ₯ν©λλ€.
useSuspenseQueryuseSuspenseInfiniteQuery