{"schemaVersion":2,"locale":"zh-cn","nodes":[{"id":"concept:tool-boundaries","type":"concept","product":"ecosystem","title":"工具职责边界","summary":"先判断问题属于全栈运行时、路由与 URL，还是异步服务端状态。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-tool-boundaries"},{"id":"concept:start-runtime","type":"concept","product":"start","title":"Start 服务端边界","summary":"理解 SSR、Server Function 与外部 Server Route 分别在哪个边界执行。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-start-runtime"},{"id":"concept:file-routing","type":"concept","product":"router","title":"文件路由与参数","summary":"让文件结构、路径参数和 Link 在同一个类型系统中协作。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-file-routing"},{"id":"concept:url-state","type":"concept","product":"router","title":"经过验证的 URL 状态","summary":"把可分享、可刷新、可前进后退的筛选状态放进经过验证的 Search Params。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-url-state"},{"id":"concept:async-cache","type":"concept","product":"query","title":"导航与异步缓存","summary":"Router 协调何时导航，Query 拥有数据缓存与重新获取生命周期。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-async-cache"},{"id":"concept:data-writes","type":"concept","product":"query","title":"写入与缓存一致性","summary":"验证写入边界，并根据服务端响应选择直接更新或失效缓存。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-data-writes"},{"id":"concept:failure-recovery","type":"concept","product":"router","title":"失败隔离与恢复","summary":"让错误在最近的路由边界停止，并向用户提供稳定的恢复路径。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-failure-recovery"},{"id":"concept:external-http-boundary","type":"concept","product":"start","title":"外部 HTTP 边界","summary":"用 Server Route 为第三方调用方明确表达状态码、缓存、安全和输入契约。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-external-http-boundary"},{"id":"concept:route-dependencies","type":"concept","product":"router","title":"类型化路由依赖","summary":"从根路由注入稳定依赖，并通过 beforeLoad 为子树追加可推导的上下文。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-route-dependencies"},{"id":"concept:cache-freshness","type":"concept","product":"query","title":"缓存新鲜度策略","summary":"分别定义数据何时陈旧，以及 inactive 查询应在缓存中保留多久。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-cache-freshness"},{"id":"concept:request-pipeline","type":"concept","product":"start","title":"服务端请求执行链","summary":"为请求和 Server Function 选择正确中间件作用域，并显式推进执行链。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-request-pipeline"},{"id":"concept:navigation-safety","type":"concept","product":"router","title":"未保存导航保护","summary":"用明确的脏状态保护路由导航和浏览器卸载，同时保留用户选择。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-navigation-safety"},{"id":"concept:request-cancellation","type":"concept","product":"query","title":"异步请求取消","summary":"把 Query 的 AbortSignal 传到网络层，停止过期 I/O 并保持缓存状态一致。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-request-cancellation"},{"id":"concept:auth-gates","type":"concept","product":"router","title":"认证门禁与服务端授权","summary":"在父 beforeLoad 阻止私有子路由加载，同时把资源级授权留在服务端数据边界。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-auth-gates"},{"id":"concept:infinite-pagination","type":"concept","product":"query","title":"有界无限分页","summary":"让服务端游标驱动页面参数，并保持 pages、pageParams 与内存边界一致。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-infinite-pagination"},{"id":"concept:ssr-query-hydration","type":"concept","product":"query","title":"Query SSR 与流式恢复","summary":"按服务端请求隔离 QueryClient，并为关键数据选择阻塞、恢复或流式传输。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-ssr-query-hydration"},{"id":"concept:optimistic-consistency","type":"concept","product":"query","title":"乐观一致性与回滚","summary":"用取消、快照、不可变写入和重新验证，让即时反馈最终回到服务端事实。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-optimistic-consistency"},{"id":"concept:headless-table-model","type":"concept","product":"table","title":"无头表格与服务端状态","summary":"用类型化列和行模型描述视图，并让排序、分页与远程数据各自拥有清晰边界。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-headless-table-model"},{"id":"concept:form-validation-boundary","type":"concept","product":"form","title":"表单校验与提交边界","summary":"让字段类型、同步与异步校验、提交状态协作，同时保留服务端最终验证。","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/map#concept-form-validation-boundary"},{"id":"learn:ecosystem-map","type":"learn","product":"ecosystem","title":"TanStack 不是一个框架","summary":"先别急着安装依赖。用一张地图理解 Start、Router 和 Query 如何各司其职。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"Start ^1 / Router ^1 / Query ^5","verifiedAgainst":"@tanstack/react-start@1.168.34 + @tanstack/react-router@1.170.18 + @tanstack/react-query@5.101.4","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/ecosystem-map","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/ecosystem-map.md"},{"id":"learn:first-start-app","type":"learn","product":"start","title":"创建第一个 Start 应用","summary":"使用官方 CLI 创建最小项目，认识路由树、根文档和开发服务器。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"Start ^1","verifiedAgainst":"TanStack CLI quick-start + @tanstack/react-start@1.168.34","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/first-start-app","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/first-start-app.md"},{"id":"learn:file-routes","type":"learn","product":"router","title":"用文件组成路由树","summary":"创建 Issue 列表和详情页，理解文件名、路径参数和类型推断如何连在一起。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"Router ^1","verifiedAgainst":"@tanstack/react-router@1.170.18 + @tanstack/router-cli@1.167.21","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/file-routes","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/file-routes.md"},{"id":"learn:url-state","type":"learn","product":"router","title":"把筛选条件放进 URL","summary":"用经过验证的 Search Params 实现可分享、可刷新、有类型的 Issue 筛选。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"Router ^1","verifiedAgainst":"@tanstack/react-router@1.170.18","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/url-state","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/url-state.md"},{"id":"learn:loader-query-cache","type":"learn","product":"query","title":"让 Loader 预热 Query 缓存","summary":"Router 决定何时导航，Query 决定数据如何缓存；用同一份 queryOptions 把两者接起来。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"Query ^5 / Router ^1","verifiedAgainst":"@tanstack/react-query@5.101.4 + @tanstack/react-router@1.170.18 + @tanstack/react-router-ssr-query@1.167.1","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/loader-query-cache","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/loader-query-cache.md"},{"id":"learn:mutations","type":"learn","product":"query","title":"从 Server Function 写回缓存","summary":"验证网络边界上的输入，通过 Mutation 表达写入状态，再用服务端响应不可变地更新 Query 缓存。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"Start ^1 / Query ^5","verifiedAgainst":"@tanstack/react-start@1.168.34 + @tanstack/react-query@5.101.4","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/mutations","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/mutations.md"},{"id":"learn:error-boundaries","type":"learn","product":"router","title":"把错误关在正确的路由里","summary":"用全局默认错误界面兜底，用 route errorComponent 隔离局部数据或渲染失败。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"Start ^1 / Router ^1","verifiedAgainst":"@tanstack/react-start@1.168.34 + @tanstack/react-router@1.170.18","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/error-boundaries","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/error-boundaries.md"},{"id":"learn:server-routes","type":"learn","product":"start","title":"把外部入口放进 Server Route","summary":"区分应用内部 RPC 与公开 HTTP 端点，并用原生 Response 明确表达状态码、正文和缓存策略。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"Start ^1 / Router ^1","verifiedAgainst":"@tanstack/react-start@1.168.34 + @tanstack/react-router@1.170.18","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/server-routes","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/server-routes.md"},{"id":"learn:route-context","type":"learn","product":"router","title":"用 Router Context 传递依赖","summary":"在根路由声明类型化依赖，再通过 beforeLoad 为一棵子路由追加经过推导的上下文。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"Router ^1","verifiedAgainst":"@tanstack/react-router@1.170.18","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/route-context","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/route-context.md"},{"id":"learn:query-freshness","type":"learn","product":"query","title":"先定义数据何时算新鲜","summary":"分清 staleTime 与 gcTime，用共享 queryOptions 把查询键、请求函数和时间策略放在一起。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"Query ^5","verifiedAgainst":"@tanstack/react-query@5.101.4","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/query-freshness","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/query-freshness.md"},{"id":"learn:start-middleware","type":"learn","product":"start","title":"用 Middleware 组合请求边界","summary":"区分请求中间件与 Server Function 中间件，并用 next() 组合日志、上下文和安全检查。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"Start ^1","verifiedAgainst":"@tanstack/react-start@1.168.34","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/start-middleware","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/start-middleware.md"},{"id":"learn:navigation-blocking","type":"learn","product":"router","title":"在离开脏表单前阻止导航","summary":"用 useBlocker 同时处理路由内导航与浏览器卸载，并为自定义确认界面建立明确状态。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"Router ^1","verifiedAgainst":"@tanstack/react-router@1.170.18","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/navigation-blocking","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/navigation-blocking.md"},{"id":"learn:query-cancellation","type":"learn","product":"query","title":"让 Query 取消真正传到网络层","summary":"消费 queryFn 提供的 AbortSignal，让失效的 fetch 停止并理解取消后的缓存状态。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"Query ^5","verifiedAgainst":"@tanstack/react-query@5.101.4","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/query-cancellation","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/query-cancellation.md"},{"id":"learn:authenticated-routes","type":"learn","product":"router","title":"在加载子路由前确认身份","summary":"用类型化 Router Context 和 pathless layout 的 beforeLoad 保护一组页面，同时保留正确的登录回跳地址。","revision":1,"sourceCheckedOn":"2026-08-03","versionRange":"Router ^1","verifiedAgainst":"@tanstack/react-router@1.170.18","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/authenticated-routes","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/authenticated-routes.md"},{"id":"learn:infinite-queries","type":"learn","product":"query","title":"让无限列表保持有界和可恢复","summary":"用 initialPageParam、游标和 maxPages 建立明确的翻页契约，同时保持 pages 与 pageParams 的结构一致。","revision":1,"sourceCheckedOn":"2026-08-03","versionRange":"Query ^5","verifiedAgainst":"@tanstack/react-query@5.101.4","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/infinite-queries","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/infinite-queries.md"},{"id":"learn:ssr-query-streaming","type":"learn","product":"query","title":"在请求之间隔离并流式恢复 Query","summary":"用 Router SSR Query 集成自动完成脱水、恢复和流式传输，并为每个服务端请求创建独立缓存。","revision":1,"sourceCheckedOn":"2026-08-03","versionRange":"Router ^1 / Query ^5","verifiedAgainst":"@tanstack/react-router@1.170.18 + @tanstack/react-router-ssr-query@1.167.1 + @tanstack/react-query@5.101.4","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/ssr-query-streaming","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/ssr-query-streaming.md"},{"id":"learn:optimistic-updates","type":"learn","product":"query","title":"让乐观更新可以安全回滚","summary":"先选择 UI 级临时结果或缓存级更新，再用取消、快照、回滚和重新验证处理失败与并发。","revision":1,"sourceCheckedOn":"2026-08-03","versionRange":"Query ^5","verifiedAgainst":"@tanstack/react-query@5.101.4","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/optimistic-updates","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/optimistic-updates.md"},{"id":"learn:headless-issue-table","type":"learn","product":"table","title":"把 Issue 数据组织成无头表格","summary":"用类型化列定义、核心行模型和 flexRender 连接数据与语义化 table 标记，同时保留完整的样式控制权。","revision":1,"sourceCheckedOn":"2026-08-03","versionRange":"Table ^8","verifiedAgainst":"@tanstack/react-table@8.21.3","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/headless-issue-table","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/headless-issue-table.md"},{"id":"learn:typed-issue-form","type":"learn","product":"form","title":"让字段、校验与提交共享同一类型","summary":"用 useForm、Field 与 Subscribe 建立受控表单，把校验时机、错误显示和异步提交状态写成显式契约。","revision":1,"sourceCheckedOn":"2026-08-03","versionRange":"Form ^1","verifiedAgainst":"@tanstack/react-form@1.33.3","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/typed-issue-form","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/learn/typed-issue-form.md"},{"id":"agent:router.file-route","type":"agent","product":"router","title":"创建带路径参数的文件路由","summary":"在 React 应用中创建 /posts/$postId，并从路由实例读取类型安全的 postId。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"^1","verifiedAgainst":"@tanstack/react-router@1.170.18","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/router/file-route","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/router/file-route.md"},{"id":"agent:router.validated-search","type":"agent","product":"router","title":"验证分页与筛选参数","summary":"将不可信的 URL 搜索参数转换为稳定、有类型的路由输入。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"^1","verifiedAgainst":"@tanstack/react-router@1.170.18","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/router/validated-search","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/router/validated-search.md"},{"id":"agent:start.server-function","type":"agent","product":"start","title":"创建只在服务端执行的函数","summary":"使用 createServerFn 定义同源、类型安全的服务端 RPC。","revision":3,"sourceCheckedOn":"2026-08-03","versionRange":"^1","verifiedAgainst":"@tanstack/react-start@1.168.34","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/start/server-function","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/start/server-function.md"},{"id":"agent:query.router-or-query","type":"agent","product":"query","title":"Router Loader 还是 Query？","summary":"根据导航关键性和数据生命周期选择 Loader、Query 或两者组合。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"Query ^5 / Router ^1","verifiedAgainst":"@tanstack/react-query@5.101.4 + @tanstack/react-router@1.170.18","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/query/router-loader-or-query","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/query/router-loader-or-query.md"},{"id":"agent:query.loader-prefetch","type":"agent","product":"query","title":"在路由 Loader 中预取 Query","summary":"为 SSR 创建请求级 QueryClient，并让 Loader 与 useSuspenseQuery 使用相同 queryOptions。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"Query ^5 / Router ^1","verifiedAgainst":"@tanstack/react-query@5.101.4 + @tanstack/react-router@1.170.18 + @tanstack/react-router-ssr-query@1.167.1","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/query/loader-prefetch","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/query/loader-prefetch.md"},{"id":"agent:query.mutation-cache-update","type":"agent","product":"query","title":"用 Mutation 响应更新缓存","summary":"当写入响应包含完整实体时用 setQueryData；无法推导正确缓存时改用 invalidateQueries。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"^5","verifiedAgainst":"@tanstack/react-query@5.101.4","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/query/mutation-cache-update","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/query/mutation-cache-update.md"},{"id":"agent:router.route-error-boundary","type":"agent","product":"router","title":"隔离路由 Loader 与渲染错误","summary":"为全局 Router 设置默认错误组件，并在需要独立恢复的路由上覆盖 errorComponent。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"^1","verifiedAgainst":"@tanstack/react-router@1.170.18","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/router/route-error-boundary","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/router/route-error-boundary.md"},{"id":"agent:start.server-route","type":"agent","product":"start","title":"创建外部可调用的 Server Route","summary":"为第三方调用方建立原生 HTTP 端点，并显式返回状态、缓存和安全响应。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"Start ^1 / Router ^1","verifiedAgainst":"@tanstack/react-start@1.168.34 + @tanstack/react-router@1.170.18","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/start/server-route","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/start/server-route.md"},{"id":"agent:router.typed-context","type":"agent","product":"router","title":"建立类型化 Router Context","summary":"在根路由声明依赖，并通过 beforeLoad 为子树追加可推导的派生上下文。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"^1","verifiedAgainst":"@tanstack/react-router@1.170.18","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/router/typed-router-context","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/router/typed-router-context.md"},{"id":"agent:query.freshness-policy","type":"agent","product":"query","title":"定义 Query 新鲜度契约","summary":"根据数据变化频率设置 staleTime，并独立决定 inactive 缓存的 gcTime。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"^5","verifiedAgainst":"@tanstack/react-query@5.101.4","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/query/freshness-policy","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/query/freshness-policy.md"},{"id":"agent:start.middleware-chain","type":"agent","product":"start","title":"建立 Start Middleware 执行链","summary":"明确请求级与函数级作用域，通过 next() 组合上下文，并保留认证和 CSRF 边界。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"^1","verifiedAgainst":"@tanstack/react-start@1.168.34","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/start/middleware-chain","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/start/middleware-chain.md"},{"id":"agent:router.navigation-blocker","type":"agent","product":"router","title":"保护脏表单的离页导航","summary":"用 useBlocker 的 resolver 状态实现可访问的离页确认，并按脏状态注册 beforeunload。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"^1","verifiedAgainst":"@tanstack/react-router@1.170.18","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/router/navigation-blocker","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/router/navigation-blocker.md"},{"id":"agent:query.abort-signal","type":"agent","product":"query","title":"消费 Query 的 AbortSignal","summary":"将 queryFn signal 传入底层请求，使取消停止 I/O，并保留明确的缓存回滚语义。","revision":2,"sourceCheckedOn":"2026-08-03","versionRange":"^5","verifiedAgainst":"@tanstack/react-query@5.101.4","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/query/abort-signal","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/query/abort-signal.md"},{"id":"agent:router.auth-before-load","type":"agent","product":"router","title":"用 beforeLoad 保护路由子树","summary":"在 pathless layout 中读取类型化认证 Context，阻止未登录用户加载子路由，并保留经过约束的回跳 URL。","revision":1,"sourceCheckedOn":"2026-08-03","versionRange":"^1","verifiedAgainst":"@tanstack/react-router@1.170.18","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/router/auth-before-load","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/router/auth-before-load.md"},{"id":"agent:query.infinite-cursor","type":"agent","product":"query","title":"建立有界的游标 Infinite Query","summary":"用一份 queryKey 管理整个列表，让服务端游标驱动 pageParam，并用 maxPages 控制缓存与重取成本。","revision":1,"sourceCheckedOn":"2026-08-03","versionRange":"^5","verifiedAgainst":"@tanstack/react-query@5.101.4","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/query/infinite-cursor","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/query/infinite-cursor.md"},{"id":"agent:query.ssr-streaming","type":"agent","product":"query","title":"配置 Query SSR 与流式恢复","summary":"为每个 SSR 请求创建 QueryClient，通过官方 Router 集成脱水与恢复，并明确阻塞和流式查询。","revision":1,"sourceCheckedOn":"2026-08-03","versionRange":"Query ^5 / Router ^1","verifiedAgainst":"@tanstack/react-query@5.101.4 + @tanstack/react-router@1.170.18 + @tanstack/react-router-ssr-query@1.167.1","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/query/ssr-streaming","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/query/ssr-streaming.md"},{"id":"agent:query.optimistic-rollback","type":"agent","product":"query","title":"实现可回滚的乐观更新","summary":"取消冲突重取、保存缓存快照、不可变写入草稿，并在失败时回滚、完成时重新验证。","revision":1,"sourceCheckedOn":"2026-08-03","versionRange":"^5","verifiedAgainst":"@tanstack/react-query@5.101.4","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/query/optimistic-rollback","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/query/optimistic-rollback.md"},{"id":"agent:table.server-grid-state","type":"agent","product":"table","title":"协调服务端表格的排序与分页状态","summary":"让 Table 管视图状态、Query 管远程数据，并用 manualSorting、manualPagination 与 rowCount 避免只处理当前页。","revision":1,"sourceCheckedOn":"2026-08-03","versionRange":"Table ^8 / Query ^5","verifiedAgainst":"@tanstack/react-table@8.21.3 + @tanstack/react-query@5.101.4","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/table/server-grid-state","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/table/server-grid-state.md"},{"id":"agent:form.async-validation","type":"agent","product":"form","title":"为字段异步校验建立安全边界","summary":"先同步过滤无效输入，再用内置 debounce 执行异步校验，并把提前反馈与最终服务端验证明确分开。","revision":1,"sourceCheckedOn":"2026-08-03","versionRange":"^1","verifiedAgainst":"@tanstack/react-form@1.33.3","htmlUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/form/async-validation","markdownUrl":"https://tanstack-atlas.vercel.app/zh-cn/agents/form/async-validation.md"}],"edges":[{"id":"concept:tool-boundaries->learn:ecosystem-map","source":"concept:tool-boundaries","target":"learn:ecosystem-map","relation":"teaches"},{"id":"concept:tool-boundaries->agent:query.router-or-query","source":"concept:tool-boundaries","target":"agent:query.router-or-query","relation":"specifies"},{"id":"concept:start-runtime->learn:first-start-app","source":"concept:start-runtime","target":"learn:first-start-app","relation":"teaches"},{"id":"concept:start-runtime->agent:start.server-function","source":"concept:start-runtime","target":"agent:start.server-function","relation":"specifies"},{"id":"concept:file-routing->learn:file-routes","source":"concept:file-routing","target":"learn:file-routes","relation":"teaches"},{"id":"concept:file-routing->agent:router.file-route","source":"concept:file-routing","target":"agent:router.file-route","relation":"specifies"},{"id":"concept:url-state->learn:url-state","source":"concept:url-state","target":"learn:url-state","relation":"teaches"},{"id":"concept:url-state->agent:router.validated-search","source":"concept:url-state","target":"agent:router.validated-search","relation":"specifies"},{"id":"concept:async-cache->learn:loader-query-cache","source":"concept:async-cache","target":"learn:loader-query-cache","relation":"teaches"},{"id":"concept:async-cache->agent:query.router-or-query","source":"concept:async-cache","target":"agent:query.router-or-query","relation":"specifies"},{"id":"concept:async-cache->agent:query.loader-prefetch","source":"concept:async-cache","target":"agent:query.loader-prefetch","relation":"specifies"},{"id":"concept:data-writes->learn:mutations","source":"concept:data-writes","target":"learn:mutations","relation":"teaches"},{"id":"concept:data-writes->agent:query.mutation-cache-update","source":"concept:data-writes","target":"agent:query.mutation-cache-update","relation":"specifies"},{"id":"concept:failure-recovery->learn:error-boundaries","source":"concept:failure-recovery","target":"learn:error-boundaries","relation":"teaches"},{"id":"concept:failure-recovery->agent:router.route-error-boundary","source":"concept:failure-recovery","target":"agent:router.route-error-boundary","relation":"specifies"},{"id":"concept:external-http-boundary->learn:server-routes","source":"concept:external-http-boundary","target":"learn:server-routes","relation":"teaches"},{"id":"concept:external-http-boundary->agent:start.server-route","source":"concept:external-http-boundary","target":"agent:start.server-route","relation":"specifies"},{"id":"concept:route-dependencies->learn:route-context","source":"concept:route-dependencies","target":"learn:route-context","relation":"teaches"},{"id":"concept:route-dependencies->agent:router.typed-context","source":"concept:route-dependencies","target":"agent:router.typed-context","relation":"specifies"},{"id":"concept:cache-freshness->learn:query-freshness","source":"concept:cache-freshness","target":"learn:query-freshness","relation":"teaches"},{"id":"concept:cache-freshness->agent:query.freshness-policy","source":"concept:cache-freshness","target":"agent:query.freshness-policy","relation":"specifies"},{"id":"concept:request-pipeline->learn:start-middleware","source":"concept:request-pipeline","target":"learn:start-middleware","relation":"teaches"},{"id":"concept:request-pipeline->agent:start.middleware-chain","source":"concept:request-pipeline","target":"agent:start.middleware-chain","relation":"specifies"},{"id":"concept:navigation-safety->learn:navigation-blocking","source":"concept:navigation-safety","target":"learn:navigation-blocking","relation":"teaches"},{"id":"concept:navigation-safety->agent:router.navigation-blocker","source":"concept:navigation-safety","target":"agent:router.navigation-blocker","relation":"specifies"},{"id":"concept:request-cancellation->learn:query-cancellation","source":"concept:request-cancellation","target":"learn:query-cancellation","relation":"teaches"},{"id":"concept:request-cancellation->agent:query.abort-signal","source":"concept:request-cancellation","target":"agent:query.abort-signal","relation":"specifies"},{"id":"concept:auth-gates->learn:authenticated-routes","source":"concept:auth-gates","target":"learn:authenticated-routes","relation":"teaches"},{"id":"concept:auth-gates->agent:router.auth-before-load","source":"concept:auth-gates","target":"agent:router.auth-before-load","relation":"specifies"},{"id":"concept:infinite-pagination->learn:infinite-queries","source":"concept:infinite-pagination","target":"learn:infinite-queries","relation":"teaches"},{"id":"concept:infinite-pagination->agent:query.infinite-cursor","source":"concept:infinite-pagination","target":"agent:query.infinite-cursor","relation":"specifies"},{"id":"concept:ssr-query-hydration->learn:ssr-query-streaming","source":"concept:ssr-query-hydration","target":"learn:ssr-query-streaming","relation":"teaches"},{"id":"concept:ssr-query-hydration->agent:query.ssr-streaming","source":"concept:ssr-query-hydration","target":"agent:query.ssr-streaming","relation":"specifies"},{"id":"concept:optimistic-consistency->learn:optimistic-updates","source":"concept:optimistic-consistency","target":"learn:optimistic-updates","relation":"teaches"},{"id":"concept:optimistic-consistency->agent:query.optimistic-rollback","source":"concept:optimistic-consistency","target":"agent:query.optimistic-rollback","relation":"specifies"},{"id":"concept:headless-table-model->learn:headless-issue-table","source":"concept:headless-table-model","target":"learn:headless-issue-table","relation":"teaches"},{"id":"concept:headless-table-model->agent:table.server-grid-state","source":"concept:headless-table-model","target":"agent:table.server-grid-state","relation":"specifies"},{"id":"concept:form-validation-boundary->learn:typed-issue-form","source":"concept:form-validation-boundary","target":"learn:typed-issue-form","relation":"teaches"},{"id":"concept:form-validation-boundary->agent:form.async-validation","source":"concept:form-validation-boundary","target":"agent:form.async-validation","relation":"specifies"}]}