dehydrate 创建一个 cache 的冻结表示,稍后可以使用 HydrationBoundary 或 hydrate 对其进行水合。这对于将预取查询从服务器传递到客户端或将查询持久化到 localStorage 或其他持久位置非常有用���默认情况下,它仅包含当前成功的查询。
import { dehydrate } from '@tanstack/solid-query'
const dehydratedState = dehydrate(queryClient, {
shouldDehydrateQuery,
shouldDehydrateMutation,
})
import { dehydrate } from '@tanstack/solid-query'
const dehydratedState = dehydrate(queryClient, {
shouldDehydrateQuery,
shouldDehydrateMutation,
})
选项
返回值
某些存储系统(例如浏览器 Web Storage API)要求值是 JSON 可序列化的。如果您需要脱水无法自动序列化为 JSON 的值(例如 Error 或 undefined),则必须自己进行序列化。由于默认情况下仅包含成功的查询,因此要同时包含 Errors,您必须提供 shouldDehydrateQuery,例如:
// 服务器
const state = dehydrate(client, { shouldDehydrateQuery: () => true }) // 同时也包含错误
const serializedState = mySerialize(state) // 将 Error 实例转换为对象
// 客户端
const state = myDeserialize(serializedState) // 将对象转换回 Error 实例
hydrate(client, state)
// 服务器
const state = dehydrate(client, { shouldDehydrateQuery: () => true }) // 同时也包含错误
const serializedState = mySerialize(state) // 将 Error 实例转换为对象
// 客户端
const state = myDeserialize(serializedState) // 将对象转换回 Error 实例
hydrate(client, state)
hydrate 将先前脱水的状态添加到 cache 中。
import { hydrate } from '@tanstack/solid-query'
hydrate(queryClient, dehydratedState, options)
import { hydrate } from '@tanstack/solid-query'
hydrate(queryClient, dehydratedState, options)
选项
如果您尝试水合的查询已存在于 queryCache 中,则 hydrate 仅在数据比缓存中存在的数据更新时才会覆盖它们。否则,它将不会被应用。