框架
版本

重要默认值

开箱即用,TanStack Query 配置了积极但合理的默认值。有时,如果用户不知道这些默认值,它们可能会让新用户措手不及,或者使学习/调试变得困难。 在您继续学习和使用 TanStack Query 时,请牢记它们

  • 通过 useQueryuseInfiniteQuery 的 Query 实例默认将缓存数据视为过时

要更改此行为,您可以使用 staleTime 选项全局和按 query 配置您的 query。指定更长的 staleTime 意味着 query 不会经常重新获取其数据

  • 当满足以下条件时,过时的 query 会在后台自动重新获取
    • query 的新实例挂载
    • 窗口重新获得焦点
    • 网络重新连接
    • query 可选择配置重新获取间隔

要更改此功能,您可以使用诸如 refetchOnMountrefetchOnWindowFocusrefetchOnReconnectrefetchInterval 等选项。

  • 没有更多 useQueryuseInfiniteQuery 或 query 观察者的活动实例的 Query 结果被标记为“非活动”,并保留在缓存中,以备稍后再次使用。

  • 默认情况下,“非活动”query 在 5 分钟后被垃圾回收。

    要更改此设置,您可以将 query 的默认 gcTime 更改为 1000 * 60 * 5 毫秒以外的其他值。

  • 失败的 query 会静默重试 3 次,并带有指数退避延迟,然后再捕获错误并将其显示在 UI 中。

    要更改此设置,您可以将 query 的默认 retryretryDelay 选项更改为 3 和默认指数退避函数以外的其他值。

  • 默认情况下,Query 结果会进行结构共享,以检测数据是否实际已更改,如果没有,则数据引用保持不变,以便更好地帮助使用 useMemo 和 useCallback 进行值稳定化。如果这个概念听起来很陌生,请不要担心!99.9% 的情况下,您不需要禁用此功能,它可以在零成本的情况下提高应用程序的性能。

    结构共享仅适用于 JSON 兼容的值,任何其他值类型将始终被视为已更改。例如,如果您因大型响应而遇到性能问题,则可以使用 config.structuralSharing 标志禁用此功能。如果您正在处理 query 响应中与 JSON 不兼容的值,并且仍然想检测数据是否已更改,则可以提供您自己的自定义函数作为 config.structuralSharing,以从旧响应和新响应中计算值,并根据需要保留引用。

延伸阅读

请查看我们社区资源中的以下文章,以进一步解释默认值