默认配置
TanStack Query 默认配置了积极但合理的设置。这些默认配置有时会让新用户感到困惑,或者在学习和调试时可能会造成困难,如果用户没有了解这些配置。继续学习和使用 TanStack Query 时,请记住以下几点:
默认情况下,查询实例(通过
useQuery
或useInfiniteQuery
)将缓存的数据视为过期数据。要更改此行为,您可以通过
staleTime
选项全局或单独配置查询。设置较长的staleTime
可以减少查询数据的重新获取频率。当查询数据处于“过期”状态时,它会在以下情况下自动重新获取:
新实例的查询挂载。
窗口重新聚焦。
网络重新连接。
查询配置了定期重新获取(
refetchInterval
)时。
要更改这些功能,你可以使用
refetchOnMount
、refetchOnWindowFocus
、refetchOnReconnect
和refetchInterval
等选项。没有活动实例的查询(例如,
useQuery
、useInfiniteQuery
或查询观察者)会被标记为“非活动”,并保留在缓存中,以防将来再次使用。默认情况下,"非活动" 查询将在 5 分钟后被垃圾回收。
要更改此设置,您可以调整查询的默认
gcTime
,将其设置为其他时间(单位:毫秒),默认值为1000 * 60 * 5
。
查询失败时,默认会安静地重试 3 次,并在每次重试之间使用指数退避(exponential backoff)延迟,直到捕获并显示错误到 UI。
要更改此行为,您可以修改查询的默认
retry
和retryDelay
选项,调整重试次数和延迟时间。
默认情况下,查询结果会进行结构共享,以检测数据是否发生了变化。如果数据没有变化,数据引用保持不变,有助于
useMemo
和useCallback
中的值稳定性。如果这个概念对您来说不太熟悉,也不必担心!99.9% 的情况下,您不需要禁用这个功能,它不会对性能产生负面影响,且让您的应用更高效。
结构共享仅适用于 JSON 兼容的值,对于其他类型的值,将始终认为数据发生了变化。如果您遇到性能问题(例如由于响应数据太大),您可以通过配置
structuralSharing
标志来禁用此功能。如果查询响应中的数据类型不是 JSON 兼容的,但仍希望检测数据是否发生了变化,您可以为
config.structuralSharing
提供自定义函数,从旧响应和新响应中计算一个值,根据需要保持引用。
最后更新于
这有帮助吗?