开箱即用,TanStack Query 配置了积极但合理的默认值。有时,如果用户不了解这些默认值,它们可能会让新用户措手不及,或者使学习/调试变得困难。 在您继续学习和使用 TanStack Query 时,请牢记它们
要更改此行为,您可以使用 staleTime 选项全局和按查询配置您的查询。指定更长的 staleTime 意味着查询不会经常重新获取其数据
要更改此功能,您可以使用诸如 refetchOnMount、refetchOnWindowFocus、refetchOnReconnect 和 refetchInterval 之类的选项。
对于 injectQuery、injectInfiniteQuery 或查询观察器不再有活动实例的查询结果,将被标记为“非活动”,并保留在缓存中,以备稍后再次使用。
默认情况下,“非活动”查询在 5 分钟后被垃圾回收。
要更改此设置,您可以将查询的默认 gcTime 更改为 1000 * 60 * 5 毫秒以外的其他值。
失败的查询会静默重试 3 次,并使用指数退避延迟,然后再捕获错误并将其显示在 UI 中。
要更改此设置,您可以将查询的默认 retry 和 retryDelay 选项更改为 3 以外的其他值和默认的指数退避函数。
默认情况下,查询结果会进行结构化共享,以检测数据是否真正发生了更改,如果未更改,则数据引用保持不变,以便更好地帮助使用信号值进行值稳定化。如果这个概念听起来很陌生,请不要担心!99.9% 的情况下,您不需要禁用此功能,并且它使您的应用程序性能更高,而您无需付出任何代价。
结构化共享仅适用于 JSON 兼容的值,任何其他值类型将始终被视为已更改。例如,如果您由于大型响应而遇到性能问题,则可以使用 config.structuralSharing 标志禁用此功能。如果您在查询响应中处理非 JSON 兼容的值,但仍想检测数据是否已更改,则可以提供您自己的自定义函数作为 config.structuralSharing,以计算来自旧响应和新响应的值,并根据需要保留引用。