默认配置

TanStack Query 默认配置了积极但合理的设置。这些默认配置有时会让新用户感到困惑,或者在学习和调试时可能会造成困难,如果用户没有了解这些配置。继续学习和使用 TanStack Query 时,请记住以下几点:

  1. 默认情况下,查询实例(通过useQueryuseInfiniteQuery)将缓存的数据视为过期数据。

    要更改此行为,您可以通过 staleTime 选项全局或单独配置查询。设置较长的 staleTime 可以减少查询数据的重新获取频率。

  2. 当查询数据处于“过期”状态时,它会在以下情况下自动重新获取:

    1. 新实例的查询挂载。

    2. 窗口重新聚焦。

    3. 网络重新连接。

    4. 查询配置了定期重新获取(refetchInterval)时。

    要更改这些功能,你可以使用 refetchOnMountrefetchOnWindowFocusrefetchOnReconnectrefetchInterval 等选项。

  3. 没有活动实例的查询(例如,useQueryuseInfiniteQuery 或查询观察者)会被标记为“非活动”,并保留在缓存中,以防将来再次使用。

    1. 默认情况下,"非活动" 查询将在 5 分钟后被垃圾回收。

    2. 要更改此设置,您可以调整查询的默认 gcTime,将其设置为其他时间(单位:毫秒),默认值为 1000 * 60 * 5

  4. 查询失败时,默认会安静地重试 3 次,并在每次重试之间使用指数退避(exponential backoff)延迟,直到捕获并显示错误到 UI。

    1. 要更改此行为,您可以修改查询的默认 retryretryDelay 选项,调整重试次数和延迟时间。

  5. 默认情况下,查询结果会进行结构共享,以检测数据是否发生了变化。如果数据没有变化,数据引用保持不变,有助于 useMemouseCallback 中的值稳定性。

    1. 如果这个概念对您来说不太熟悉,也不必担心!99.9% 的情况下,您不需要禁用这个功能,它不会对性能产生负面影响,且让您的应用更高效。

    2. 结构共享仅适用于 JSON 兼容的值,对于其他类型的值,将始终认为数据发生了变化。如果您遇到性能问题(例如由于响应数据太大),您可以通过配置 structuralSharing 标志来禁用此功能。

    3. 如果查询响应中的数据类型不是 JSON 兼容的,但仍希望检测数据是否发生了变化,您可以为 config.structuralSharing 提供自定义函数,从旧响应和新响应中计算一个值,根据需要保持引用。

最后更新于

这有帮助吗?