하이드레이션
dehydrate
dehydrate는 나중에 HydrationBoundary 또는 hydrate로 하이드레이션할 수 있는 cache의 고정된 표현을 생성합니다. 이는 프리페치한 쿼리를 서버에서 클라이언트로 전달하거나 쿼리를 localStorage 또는 기타 영구 저장 위치에 영구 저장하는 데 유용합니다. 기본적으로 현재 성공한 쿼리만 포함합니다.
import { dehydrate } from '@tanstack/react-query'
const dehydratedState = dehydrate(queryClient, {
shouldDehydrateQuery,
shouldDehydrateMutation,
})
옵션
client: QueryClient- Required
- 디하이드레이션해야 하는
queryClient
options: DehydrateOptions- 선택 사항
shouldDehydrateMutation: (mutation: Mutation) => boolean- 선택 사항
- 뮤테이션을 디하이드레이션할지 여부입니다.
- 캐시의 각 뮤테이션에 대해 함수가 호출됩니다
- 이 뮤테이션을 디하이드레이션에 포함하려면
true를 반환하고, 그렇지 않으면false를 반환합니다
- 이 뮤테이션을 디하이드레이션에 포함하려면
- 기본적으로 일시 중지된 뮤테이션만 포함합니다
- 기본 동작을 유지하면서 함수를 확장하려면 return 문에
defaultShouldDehydrateMutation을 import하고 실행합니다
shouldDehydrateQuery: (query: Query) => boolean- 선택 사항
- 쿼리를 디하이드레이션할지 여부입니다.
- 이 함수는 캐시의 각 쿼리에 대해 호출됩니다
- 이 쿼리를 디하이드레이션에 포함하려면
true를 반환하고, 그렇지 않으면false를 반환하세요
- 이 쿼리를 디하이드레이션에 포함하려면
- 기본적으로 성공한 쿼리만 포함합니다
- 기본 동작을 유지하면서 함수를 확장하려면 return 문에
defaultShouldDehydrateQuery를 import하고 실행합니다
serializeData?: (data: any) => any디하이드레이션 중 데이터를 변환(직렬화)하는 함수입니다.shouldRedactErrors?: (error: unknown) => boolean- 선택 사항
- 디하이드레이션 중 서버의 오류를 마스킹할지 여부입니다.
- 이 함수는 캐시의 각 오류에 대해 호출됩니다
- 이 오류를 숨기려면
true를 반환하고, 그렇지 않으면false를 반환합니다
- 이 오류를 숨기려면
- 기본적으로 모든 오류를 수정 처리합니다.
반환값
dehydratedState: DehydratedState- 여기에는 나중에
queryClient를 하이드레이션하는 데 필요한 모든 것이 포함됩니다 - 이 응답의 정확한 형식에 의존해서는 안 됩니다. 이는 공개 API의 일부가 아니며 언제든지 변경될 수 있습니다.
- 이 결과는 직렬화된 형태가 아니므로, 원한다면 직접 직렬화해야 합니다
- 여기에는 나중에
제한 사항
일부 저장소 시스템(예: 브라우저 Web Storage API)에서는 값을 JSON 직렬화할 수 있어야 합니다. JSON으로 자동 직렬화할 수 없는 값(예: Error 또는 undefined)을 디하이드레이션해야 한다면 직접 직렬화해야 합니다. 기본적으로 성공한 쿼리만 포함되므로 Errors도 포함하려면 shouldDehydrateQuery를 제공해야 합니다. 예:
// server
const state = dehydrate(client, { shouldDehydrateQuery: () => true }) // to also include Errors
const serializedState = mySerialize(state) // transform Error instances to objects
// client
const state = myDeserialize(serializedState) // transform objects back to Error instances
hydrate(client, state)
hydrate
hydrate는 이전에 디하이드레이션된 상태를 cache에 추가합니다.
import { hydrate } from '@tanstack/react-query'
hydrate(queryClient, dehydratedState, options)
옵션
client: QueryClient- Required
- 상태를 하이드레이션할
queryClient
dehydratedState: DehydratedState- Required
- 클라이언트에 하이드레이션할 상태
options: HydrateOptions- 선택 사항
defaultOptions: DefaultOptions- 선택 사항
mutations: MutationOptions하이드레이션된 뮤테이션에 사용할 기본 뮤테이션 옵션입니다.queries: QueryOptions하이드레이션된 쿼리에 사용할 기본 쿼리 옵션입니다.deserializeData?: (data: any) => any데이터를 캐시에 넣기 전에 변환(역직렬화)하는 함수입니다.
queryClient?: QueryClient- 사용자 지정 QueryClient를 사용하려면 이를 사용합니다. 그렇지 않으면 가장 가까운 context의 항목이 사용됩니다.
제한 사항
하이드레이션하려는 쿼리가 이미 queryCache에 존재하는 경우, hydrate는 데이터가 캐시에 있는 데이터보다 최신일 때만 이를 덮어씁니다. 그렇지 않으면 적용되지 않습니다.
HydrationBoundary
HydrationBoundary는 이전에 디하이드레이션된 상태를 useQueryClient()가 반환할 queryClient에 추가합니다. 클라이언트에 이미 데이터가 있는 경우 새 쿼리는 업데이트 타임스탬프를 기준으로 지능적으로 병합됩니다.
import { HydrationBoundary } from '@tanstack/react-query'
function App() {
return <HydrationBoundary state={dehydratedState}>...</HydrationBoundary>
}
참고:
queries만HydrationBoundary를 사용하여 디하이드레이션할 수 있습니다.
옵션
state: DehydratedState- 하이드레이션할 상태
options: HydrateOptions- 선택 사항
defaultOptions: QueryOptions- 하이드레이션된 쿼리에 사용할 기본 쿼리 옵션입니다.
- 참고:
hydrate와 달리 여기서는mutations를 설정할 수 없습니다.
queryClient?: QueryClient- 사용자 지정 QueryClient를 사용하려면 이를 사용합니다. 그렇지 않으면 가장 가까운 context의 항목이 사용됩니다.