dehydrate 创建了一个 cache 的冻结表示,之后可以使用 HydrationBoundary 或 hydrate 对其进行 hydration。这对于将预取的 query 从服务器传递到客户端,或将 query 持久化到 localStorage 或其他持久位置非常有用。默认情况下,它仅包含当前成功的 query。
import { dehydrate } from '@tanstack/react-query'
const dehydratedState = dehydrate(queryClient, {
shouldDehydrateQuery,
shouldDehydrateMutation,
})
import { dehydrate } from '@tanstack/react-query'
const dehydratedState = dehydrate(queryClient, {
shouldDehydrateQuery,
shouldDehydrateMutation,
})
选项
返回值
某些存储系统(例如浏览器 Web Storage API)要求值是 JSON 可序列化的。如果您需要 dehydrate 无法自动序列化为 JSON 的值(例如 Error 或 undefined),则必须自己序列化它们。由于默认情况下仅包含成功的 query,因此要也包含 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)
// 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 将先前 dehydrate 的状态添加到 cache 中。
import { hydrate } from '@tanstack/react-query'
hydrate(queryClient, dehydratedState, options)
import { hydrate } from '@tanstack/react-query'
hydrate(queryClient, dehydratedState, options)
选项
如果您尝试 hydrate 的 query 已经存在于 queryCache 中,则仅当数据比缓存中存在的数据更新时,hydrate 才会覆盖它们。否则,它将不会被应用。
HydrationBoundary 将先前 dehydrate 的状态添加到 useQueryClient() 将返回的 queryClient 中。如果客户端已包含数据,则将根据更新时间戳智能合并新 query。
import { HydrationBoundary } from '@tanstack/react-query'
function App() {
return <HydrationBoundary state={dehydratedState}>...</HydrationBoundary>
}
import { HydrationBoundary } from '@tanstack/react-query'
function App() {
return <HydrationBoundary state={dehydratedState}>...</HydrationBoundary>
}
注意:只有 queries 可以通过 HydrationBoundary 进行 dehydrate。
选项