译零 TransZero · TanStack Query 中文文档
主站

滚动位置恢复

更新于 2026-11-02 Preact 查看英文原文 ↗

传统上,当你在网页浏览器中导航回一个此前访问过的页面时,页面会自动滚动到你此前离开该页面时的精确位置。这称为滚动位置恢复(scroll restoration)。然而,随着 Web 应用逐渐转向客户端数据拉取,这一功能出现了一定程度的退化。而使用 TanStack Query 后,这一问题便不复存在。

TanStack Query 本身并不直接实现滚动位置恢复,但它消除了单页应用(SPA)中导致滚动位置恢复失效的最主要原因:由重新拉取(refetch)引发的 UI 重置。通过将此前拉取的数据保留在缓存中(并可选地配合使用 placeholderData),导航回某页面时即可立即完成渲染且布局稳定,从而让路由器(例如 React Router 的 ScrollRestoration、TanStack Router 的滚动位置恢复功能,或一个基于 history 的小型自定义方案)能可靠地处理滚动位置恢复。

开箱即用,TanStack Query 对所有查询(包括分页查询和无限查询)的“滚动位置恢复”功能均能正常工作™️。其原理在于:查询结果被缓存,并可在查询渲染时同步获取。只要你的查询被缓存了足够长的时间(默认为 5 分钟)且尚未被垃圾回收(garbage collected),滚动位置恢复便会始终正常工作。