TanStack Query

[TanStack Query / React Query] 데이터 관리 기능: prefetchQuery, setQueryData, placeholderData, initialData

머지?는 병합입니다 2024. 11. 19. 16:03
  where to use? data from? 캐시 저장 여부
prefetchQuery  queryClient 메서드 server O
setQueryData  queryClient 메서드 client O
placeholderData useQuery 옵션 client X
initialData useQuery 옵션 client O

 

 

1. prefetchQuery

 

  • 데이터를 미리 가져와서 캐시에 저장하는 기능입니다
  • 사용자가 특정 페이지나 컴포넌트에 방문하기 전에 미리 데이터를 로드할 때 유용합니다
  • queryClient 메서드 입니다
const queryClient = useQueryClient()

// 미리 데이터 fetch
await queryClient.prefetchQuery({
  queryKey: ['todos'],
  queryFn: fetchTodoList
})

 

 

https://daunje0.tistory.com/206

 

[TanStack Query / React Query] prefetchQuery : 데이터 선제적 로딩

이전 토이 프로젝트에서는 react-router 와 함께 사용하여loader 를 이용하여 페이지가 열리기 전, 사전에 데이터를 가져오는 방법을 사용했었지만순수하게 TanStack Query 를 사용하여 사전에 데이터를

daunje0.tistory.com

 

 

2. setQueryData

 

  • 캐시된 쿼리 데이터를 직접 수정할 수 있는 메서드입니다
  • 서버 요청 없이 로컬 데이터를 즉시 업데이트할 때 사용합니다
  • mutate ( 추가, 삭제, 업데이터) 후 변형된 데이터를 먼저 화면에 보여주고, 변형된 데이터를 서버에서 가져오기
    전까지 화면에 보여주는 용도로 사용합니다.
  • queryClient 메서드 입니다
const queryClient = useQueryClient()

// 캐시 데이터 직접 수정
queryClient.setQueryData(['todo', 5], (old) => ({
  ...old,
  title: '새로운 제목'
}))

 

https://daunje0.tistory.com/213

 

[TanStack Query / React Query] setQueryData : Mutation 응답으로부터의 업데이트

https://tanstack.com/query/latest/docs/framework/react/guides/updates-from-mutation-responses TanStack | High Quality Open-Source Software for Web DevelopersHeadless, type-safe, powerful utilities for complex workflows like Data Management, Data Visualiza

daunje0.tistory.com

 


3. placeholderData

 

  • 쿼리가 로딩 중일 때 임시로 보여줄 데이터를 지정합니다
  • 실제 데이터가 도착하기 전까지 UI에 표시할 임시 데이터로 사용됩니다
  • useQuery 옵션 입니다
const { data } = useQuery({
  queryKey: ['todos'],
  queryFn: fetchTodoList,
  placeholderData: [
    { id: 1, title: '임시 할일' }
  ]
})

 

 

4. placeholderData

 

  • 쿼리의 초기 데이터를 설정합니다
  • placeholderData와 달리 실제 캐시에 저장되며, 캐시된 것처럼 취급됩니다
  • useQuery 옵션 입니다
const { data } = useQuery({
  queryKey: ['todos'],
  queryFn: fetchTodoList,
  initialData: [
    { id: 1, title: '초기 할일' }
  ]
})

 

 

5.  placeholderData vs initialData 주요 차이점

 

placeholderData 는 이름처럼 임시 데이터로 취급이 되며 캐시에 저장이 되지 않고 로딩 상태에서만 사용됩니다.

 

이에 반해 initialData 는 실제 데이터로 취급 되며, 캐시에 저장이 되고, staleTime과 cacheTime의 영향을 받습니다.