PageSourceSearch

https://tanstack-atlas.vercel.app/zh-cn/agents

html tanstack-atlas.vercel.app collected 2026-10-03 07:50:28 UTC 27,159 bytes, 78 lines download raw bytes

1<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/assets/styles-CYVyV2Ng.css" data-precedence="default"/><title>Agent 资料 — TanStack 中文文档</title><meta name="description" content="Original bilingual TanStack learning paths for people and structured engineering references for AI agents."/><meta name="theme-color" content="#0a0a0c"/><meta property="og:site_name" content="TanStack Atlas"/><meta property="og:type" content="website"/><meta name="robots" content="index, follow"/><link rel="modulepreload" href="/assets/index-hLjVoo_m.js"/><link rel="modulepreload" href="/assets/i18n-CMbmrGSa.js"/><link rel="modulepreload" href="/assets/qss-B4cMWIbE.js"/><link rel="modulepreload" href="/assets/route-C6stfi0P.js"/><link rel="modulepreload" href="/assets/route-CLG_1kaG.js"/><link rel="modulepreload" href="/assets/Icons-B_6I98JM.js"/><link rel="modulepreload" href="/assets/schema-CCDEugzF.js"/><link rel="modulepreload" href="/assets/docs-navigation-BQJIrtXY.js"/><link rel="modulepreload" href="/assets/agents-CvHSucn9.js"/><link rel="modulepreload" href="/assets/CopyButton-Ddsz8opC.js"/><link rel="modulepreload" href="/assets/agent-content-DT1CIFOH.js"/><link rel="modulepreload" href="/assets/TopicCards-i7c-hDVF.js"/><link rel="icon" type="image/svg+xml" href="/favicon.svg"/><link rel="canonical" href="https://tanstack.edu.rich/zh-cn/agents"/><link rel="alternate" hrefLang="zh-CN" href="https://tanstack.edu.rich/zh-cn/agents"/><link rel="alternate" hrefLang="en" href="https://tanstack.edu.rich/en/agents"/><link rel="alternate" hrefLang="x-default" href="https://tanstack.edu.rich/zh-cn/agents"/>
1<script>try{var t=localStorage.getItem('atlas-theme');if(t!=='light'&&t!=='dark'){t=window.matchMedia('(prefers-color-scheme: light)').matches?'light':'dark'}document.documentElement.dataset.theme=t;var d=localStorage.getItem('atlas-design');if(d!=='a'&&d!=='b'&&d!=='c'){d='b'}document.documentElement.dataset.design=d}catch(e){document.documentElement.dataset.theme='dark';document.documentElement.dataset.design='b'}</script>
1</head><body><!--$--><div class="site-shell"><a class="skip-link" href="#main-content">跳到正文</a><header class="site-header"><div class="site-header-inner"><a aria-label="TanStack 中文文档首页" class="brand active" href="/zh-cn" data-status="active" aria-current="page"><span class="brand-mark" aria-hidden="true"><span></span><span></span></span><span class="brand-wordmark"><strong>TANSTACK</strong><small>中文文档</small></span></a><div class="header-actions"><a aria-label="搜索文档" href="/zh-cn/search" class="site-search-link"><svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="8.5" cy="8.5" r="5.25" fill="none" stroke="currentColor" stroke-width="1.6"></circle><path d="m12.4 12.4 4 4" fill="none" stroke="currentColor" stroke-width="1.6"></path></svg><span>搜索文档</span><kbd>/</kbd></a><a class="source-link" href="https://tanstack.com" target="_blank" rel="noreferrer"><span>官方文档</span><svg viewBox="0 0 20 20" aria-hidden="true"><path d="M5 15 15 5M7 5h8v8" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a><a class="locale-switch" href="/en/agents" hrefLang="en">EN</a><button type="button" class="theme-toggle" aria-label="切换明暗主题" title="切换明暗主题"><svg viewBox="0 0 24 24" aria-hidden="true" class="theme-icon-sun"><circle cx="12" cy="12" r="4.5" fill="none" stroke="currentColor" stroke-width="1.6"></circle><path d="M12 2.5v2.5M12 19v2.5M2.5 12H5m14 0h2.5M4.9 4.9l1.8 1.8m10.6 10.6 1.8 1.8M19.1 4.9l-1.8 1.8M6.7 17.3l-1.8 1.8" fill="none" stroke="currentColor" stroke-width="1.6"></path></svg><svg viewBox="0 0 24 24" aria-hidden="true" class="theme-icon-moon"><path d="M20.4 14.2A8.5 8.5 0 1 1 9.8 3.6a7 7 0 1 0 10.6 10.6z" fill="none" stroke="currentColor" stroke-width="1.6"></path></svg></button></div></div></header><nav class="docs-topbar" aria-label="文档目录"><div class="docs-topbar-inner"><a href="/zh-cn">概览</a><a href="/zh-cn/learn">入门教程</a><a data-active="true" href="/zh-cn/agents" data-status="active" aria-current="page">Agent 文档</a><a href="/zh-cn/ecosystem">生态地图</a><div class="docs-topbar-tools"><a href="/zh-cn/search">搜索文档</a><a href="/zh-cn/map">知识图谱</a><a href="/zh-cn/lab/issues">交互实验</a><a href="/zh-cn/links">友情链接</a></div></div></nav><div class="docs-layout"><aside class="docs-sidebar"><nav class="docs-navigation" aria-label="文档目录"><div class="docs-section-switch"><a href="/zh-cn">概览</a><a href="/zh-cn/learn">入门教程</a><a data-active="true" href="/zh-cn/agents" data-status="active" aria-current="page">Agent 文档</a></div><div class="docs-nav-list"><a data-active="true" href="/zh-cn/agents" data-status="active" aria-current="page"><span>索引与使用方法</span></a></div><div class="docs-nav-group"><span><i class="docs-product-dot" style="background:#e84a2a"></i>Start<small>3</small></span><a href="/zh-cn/agents/start/server-function"><span>创建只在服务端执行的函数</span></a><a href="/zh-cn/agents/start/server-route"><span>创建外部可调用的 Server Route</span></a><a href="/zh-cn/agents/start/middleware-chain"><span>建立 Start Middleware 执行链</span></a></div><div class="docs-nav-group"><span><i class="docs-product-dot" style="background:#d8ff3e"></i>Router<small>6</small></span><a href="/zh-cn/agents/router/file-route"><span>创建带路径参数的文件路由</span></a><a href="/zh-cn/agents/router/validated-search"><span>验证分页与筛选参数</span></a><a href="/zh-cn/agents/router/route-error-boundary"><span>隔离路由 Loader 与渲染错误</span></a><a href="/zh-cn/agents/router/typed-router-context"><span>建立类型化 Router Context</span></a><a href="/zh-cn/agents/router/navigation-blocker"><span>保护脏表单的离页导航</span></a><a href="/zh-cn/agents/router/auth-before-load"><span>用 beforeLoad 保护路由子树</span></a></div><div class="docs-nav-group"><span><i class="docs-product-dot" style="background:#4da3ff"></i>Query<small>8</small></span><a href="/zh-cn/agents/query/router-loader-or-query"><span>Router Loader 还是 Query?</span></a><a href="/zh-cn/agents/query/loader-prefetch"><span>在路由 Loader 中预取 Query</span></a><a href="/zh-cn/agents/query/mutation-cache-update"><span>用 Mutation 响应更新缓存</span></a><a href="/zh-cn/agents/query/freshness-policy"><span>定义 Query 新鲜度契约</span></a><a href="/zh-cn/agents/query/abort-signal"><span>消费 Query 的 AbortSignal</span></a><a href="/zh-cn/agents/query/infinite-cursor"><span>建立有界的游标 Infinite Query</span></a><a href="/zh-cn/agents/query/ssr-streaming"><span>配置 Query SSR 与流式恢复</span></a><a href="/zh-cn/agents/query/optimistic-rollback"><span>实现可回滚的乐观更新</span></a></div><div class="docs-nav-group"><span><i class="docs-product-dot" style="background:#38bdf8"></i>Table<small>1</small></span><a href="/zh-cn/agents/table/server-grid-state"><span>协调服务端表格的排序与分页状态</span></a></div><div class="docs-nav-group"><span><i class="docs-product-dot" style="background:#fbbf24"></i>Form<small>1</small></span><a href="/zh-cn/agents/form/async-validation"><span>为字段异步校验建立安全边界</span></a></div></nav></aside><div class="docs-stage"><details class="mobile-docs-menu"><summary>浏览文档目录</summary><div class="mobile-docs-menu-panel"><nav class="docs-navigation" aria-label="文档目录"><div class="docs-section-switch"><a href="/zh-cn">概览</a><a href="/zh-cn/learn">入门教程</a><a data-active="true" href="/zh-cn/agents" data-status="active" aria-current="page">Agent 文档</a></div><div class="docs-nav-list"><a data-active="true" href="/zh-cn/agents" data-status="active" aria-current="page"><span>索引与使用方法</span></a></div><div class="docs-nav-group"><span><i class="docs-product-dot" style="background:#e84a2a"></i>Start<small>3</small></span><a href="/zh-cn/agents/start/server-function"><span>创建只在服务端执行的函数</span></a><a href="/zh-cn/agents/start/server-route"><span>创建外部可调用的 Server Route</span></a><a href="/zh-cn/agents/start/middleware-chain"><span>建立 Start Middleware 执行链</span></a></div><div class="docs-nav-group"><span><i class="docs-product-dot" style="background:#d8ff3e"></i>Router<small>6</small></span><a href="/zh-cn/agents/router/file-route"><span>创建带路径参数的文件路由</span></a><a href="/zh-cn/agents/router/validated-search"><span>验证分页与筛选参数</span></a><a href="/zh-cn/agents/router/route-error-boundary"><span>隔离路由 Loader 与渲染错误</span></a><a href="/zh-cn/agents/router/typed-router-context"><span>建立类型化 Router Context</span></a><a href="/zh-cn/agents/router/navigation-blocker"><span>保护脏表单的离页导航</span></a><a href="/zh-cn/agents/router/auth-before-load"><span>用 beforeLoad 保护路由子树</span></a></div><div class="docs-nav-group"><span><i class="docs-product-dot" style="background:#4da3ff"></i>Query<small>8</small></span><a href="/zh-cn/agents/query/router-loader-or-query"><span>Router Loader 还是 Query?</span></a><a href="/zh-cn/agents/query/loader-prefetch"><span>在路由 Loader 中预取 Query</span></a><a href="/zh-cn/agents/query/mutation-cache-update"><span>用 Mutation 响应更新缓存</span></a><a href="/zh-cn/agents/query/freshness-policy"><span>定义 Query 新鲜度契约</span></a><a href="/zh-cn/agents/query/abort-signal"><span>消费 Query 的 AbortSignal</span></a><a href="/zh-cn/agents/query/infinite-cursor"><span>建立有界的游标 Infinite Query</span></a><a href="/zh-cn/agents/query/ssr-streaming"><span>配置 Query SSR 与流式恢复</span></a><a href="/zh-cn/agents/query/optimistic-rollback"><span>实现可回滚的乐观更新</span></a></div><div class="docs-nav-group"><span><i class="docs-product-dot" style="background:#38bdf8"></i>Table<small>1</small></span><a href="/zh-cn/agents/table/server-grid-state"><span>协调服务端表格的排序与分页状态</span></a></div><div class="docs-nav-group"><span><i class="docs-product-dot" style="background:#fbbf24"></i>Form<small>1</small></span><a href="/zh-cn/agents/form/async-validation"><span>为字段异步校验建立安全边界</span></a></div></nav></div></details><div id="main-content" tabindex="-1"><main class="agents-index"><section class="agents-masthead"><div class="page-frame agents-masthead-grid"><div class="agents-title-block"><span class="eyebrow eyebrow-light">Agent 文档</span><h1>为任务取回最小、正确的上下文。</h1><p>这里没有写给人类的长篇教程。每篇资料都声明任务、包、版本、约束、最小实现和验证方式。</p></div><div class="agent-entry-command"><span>Agent 入口</span><code>GET /zh-cn/llms.txt</code>
1<button class="copy-button" type="button" aria-live="polite"><svg viewBox="0 0 20 20" aria-hidden="true"><rect x="6" y="6" width="10" height="10" rx="1" fill="none" stroke="currentColor" stroke-width="1.4"></rect><path d="M13 6V4H4v9h2" fill="none" stroke="currentColor" stroke-width="1.4"></path></svg><span>Copy path</span></button></div><ol class="agent-sequence"><li><span>0<!-- -->1</span>获取 llms.txt</li><li><span>0<!-- -->2</span>按产品选择</li><li><span>0<!-- -->3</span>按 task 取回单篇</li><li><span>0<!-- -->4</span>检查 versionRange</li></ol></div></section><section class="agent-catalog page-frame"><header><span>CATALOG / <!-- -->19</span><div><h2>可用知识单元</h2><p>同时提供 HTML 阅读页与原始 Markdown。</p></div></header><section class="agent-product-group"><div class="agent-product-label"><span class="product-dot" style="background-color:#e84a2a"></span><span>01</span><h3>TanStack Start</h3><p>全栈应用框架</p></div><div class="agent-doc-list"><a href="/zh-cn/agents/start/server-function" class="agent-doc-row"><span class="doc-kind doc-kind-recipe">recipe</span><span class="agent-doc-copy"><strong>创建只在服务端执行的函数</strong><small>使用 createServerFn 定义同源、类型安全的服务端 RPC。</small></span><span class="agent-doc-version">^1</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a><a href="/zh-cn/agents/start/server-route" class="agent-doc-row"><span class="doc-kind doc-kind-recipe">recipe</span><span class="agent-doc-copy"><strong>创建外部可调用的 Server Route</strong><small>为第三方调用方建立原生 HTTP 端点,并显式返回状态、缓存和安全响应。</small></span><span class="agent-doc-version">Start ^1 / Router ^1</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a><a href="/zh-cn/agents/start/middleware-chain" class="agent-doc-row"><span class="doc-kind doc-kind-contract">contract</span><span class="agent-doc-copy"><strong>建立 Start Middleware 执行链</strong><small>明确请求级与函数级作用域,通过 next() 组合上下文,并保留认证和 CSRF 边界。</small></span><span class="agent-doc-version">^1</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a></div></section><section class="agent-product-group"><div class="agent-product-label"><span class="product-dot" style="background-color:#d8ff3e"></span><span>02</span><h3>TanStack Router</h3><p>类型安全的路由与 URL 状态</p></div><div class="agent-doc-list"><a href="/zh-cn/agents/router/file-route" class="agent-doc-row"><span class="doc-kind doc-kind-recipe">recipe</span><span class="agent-doc-copy"><strong>创建带路径参数的文件路由</strong><small>在 React 应用中创建 /posts/$postId,并从路由实例读取类型安全的 postId。</small></span><span class="agent-doc-version">^1</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a><a href="/zh-cn/agents/router/validated-search" class="agent-doc-row"><span class="doc-kind doc-kind-recipe">recipe</span><span class="agent-doc-copy"><strong>验证分页与筛选参数</strong><small>将不可信的 URL 搜索参数转换为稳定、有类型的路由输入。</small></span><span class="agent-doc-version">^1</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a><a href="/zh-cn/agents/router/route-error-boundary" class="agent-doc-row"><span class="doc-kind doc-kind-error">error</span><span class="agent-doc-copy"><strong>隔离路由 Loader 与渲染错误</strong><small>为全局 Router 设置默认错误组件,并在需要独立恢复的路由上覆盖 errorComponent。</small></span><span class="agent-doc-version">^1</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a><a href="/zh-cn/agents/router/typed-router-context" class="agent-doc-row"><span class="doc-kind doc-kind-contract">contract</span><span class="agent-doc-copy"><strong>建立类型化 Router Context</strong><small>在根路由声明依赖,并通过 beforeLoad 为子树追加可推导的派生上下文。</small></span><span class="agent-doc-version">^1</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a><a href="/zh-cn/agents/router/navigation-blocker" class="agent-doc-row"><span class="doc-kind doc-kind-recipe">recipe</span><span class="agent-doc-copy"><strong>保护脏表单的离页导航</strong><small>用 useBlocker 的 resolver 状态实现可访问的离页确认,并按脏状态注册 beforeunload。</small></span><span class="agent-doc-version">^1</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a><a href="/zh-cn/agents/router/auth-before-load" class="agent-doc-row"><span class="doc-kind doc-kind-recipe">recipe</span><span class="agent-doc-copy"><strong>用 beforeLoad 保护路由子树</strong><small>在 pathless layout 中读取类型化认证 Context,阻止未登录用户加载子路由,并保留经过约束的回跳 URL。</small></span><span class="agent-doc-version">^1</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a></div></section><section class="agent-product-group"><div class="agent-product-label"><span class="product-dot" style="background-color:#4da3ff"></span><span>03</span><h3>TanStack Query</h3><p>服务端状态与异步数据</p></div><div class="agent-doc-list"><a href="/zh-cn/agents/query/router-loader-or-query" class="agent-doc-row"><span class="doc-kind doc-kind-decision">decision</span><span class="agent-doc-copy"><strong>Router Loader 还是 Query?</strong><small>根据导航关键性和数据生命周期选择 Loader、Query 或两者组合。</small></span><span class="agent-doc-version">Query ^5 / Router ^1</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a><a href="/zh-cn/agents/query/loader-prefetch" class="agent-doc-row"><span class="doc-kind doc-kind-recipe">recipe</span><span class="agent-doc-copy"><strong>在路由 Loader 中预取 Query</strong><small>为 SSR 创建请求级 QueryClient,并让 Loader 与 useSuspenseQuery 使用相同 queryOptions。</small></span><span class="agent-doc-version">Query ^5 / Router ^1</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a><a href="/zh-cn/agents/query/mutation-cache-update" class="agent-doc-row"><span class="doc-kind doc-kind-recipe">recipe</span><span class="agent-doc-copy"><strong>用 Mutation 响应更新缓存</strong><small>当写入响应包含完整实体时用 setQueryData;无法推导正确缓存时改用 invalidateQueries。</small></span><span class="agent-doc-version">^5</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a><a href="/zh-cn/agents/query/freshness-policy" class="agent-doc-row"><span class="doc-kind doc-kind-contract">contract</span><span class="agent-doc-copy"><strong>定义 Query 新鲜度契约</strong><small>根据数据变化频率设置 staleTime,并独立决定 inactive 缓存的 gcTime。</small></span><span class="agent-doc-version">^5</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a><a href="/zh-cn/agents/query/abort-signal" class="agent-doc-row"><span class="doc-kind doc-kind-contract">contract</span><span class="agent-doc-copy"><strong>消费 Query 的 AbortSignal</strong><small>将 queryFn signal 传入底层请求,使取消停止 I/O,并保留明确的缓存回滚语义。</small></span><span class="agent-doc-version">^5</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a><a href="/zh-cn/agents/query/infinite-cursor" class="agent-doc-row"><span class="doc-kind doc-kind-recipe">recipe</span><span class="agent-doc-copy"><strong>建立有界的游标 Infinite Query</strong><small>用一份 queryKey 管理整个列表,让服务端游标驱动 pageParam,并用 maxPages 控制缓存与重取成本。</small></span><span class="agent-doc-version">^5</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a><a href="/zh-cn/agents/query/ssr-streaming" class="agent-doc-row"><span class="doc-kind doc-kind-contract">contract</span><span class="agent-doc-copy"><strong>配置 Query SSR 与流式恢复</strong><small>为每个 SSR 请求创建 QueryClient,通过官方 Router 集成脱水与恢复,并明确阻塞和流式查询。</small></span><span class="agent-doc-version">Query ^5 / Router ^1</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a><a href="/zh-cn/agents/query/optimistic-rollback" class="agent-doc-row"><span class="doc-kind doc-kind-recipe">recipe</span><span class="agent-doc-copy"><strong>实现可回滚的乐观更新</strong><small>取消冲突重取、保存缓存快照、不可变写入草稿,并在失败时回滚、完成时重新验证。</small></span><span class="agent-doc-version">^5</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a></div></section><section class="agent-product-group"><div class="agent-product-label"><span class="product-dot" style="background-color:#38bdf8"></span><span>04</span><h3>TanStack Table</h3><p>无头表格与数据网格逻辑</p></div><div class="agent-doc-list"><a href="/zh-cn/agents/table/server-grid-state" class="agent-doc-row"><span class="doc-kind doc-kind-contract">contract</span><span class="agent-doc-copy"><strong>协调服务端表格的排序与分页状态</strong><small>让 Table 管视图状态、Query 管远程数据,并用 manualSorting、manualPagination 与 rowCount 避免只处理当前页。</small></span><span class="agent-doc-version">Table ^8 / Query ^5</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a></div></section><section class="agent-product-group"><div class="agent-product-label"><span class="product-dot" style="background-color:#fbbf24"></span><span>05</span><h3>TanStack Form</h3><p>类型安全的表单状态与校验</p></div><div class="agent-doc-list"><a href="/zh-cn/agents/form/async-validation" class="agent-doc-row"><span class="doc-kind doc-kind-contract">contract</span><span class="agent-doc-copy"><strong>为字段异步校验建立安全边界</strong><small>先同步过滤无效输入,再用内置 debounce 执行异步校验,并把提前反馈与最终服务端验证明确分开。</small></span><span class="agent-doc-version">^1</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12h15m-5-5 5 5-5 5" fill="none" stroke="currentColor" stroke-width="1.7"></path></svg></a></div></section></section></main></div><footer class="docs-footer"><span>TanStack 中文文档</span><p>原创双语知识库 · 内容由官方源校验</p><a href="/zh-cn/links">友情链接</a><a href="https://github.com/TanStack" target="_blank" rel="noreferrer">GitHub</a></footer></div></div><div class="design-switcher" role="group" aria-label="Design variant preview"><button type="button" data-active="true">A 三栏</button><button type="button">B 顶栏</button><button type="button">C 门户</button></div></div>
1<script>(function(a,f){let l;try{l=JSON.parse(sessionStorage.getItem(a)||"{}")}catch{return}const n=l?.[f||history.state?.__TSR_key];let c=!1;for(const t in n){const e=n[t],o=e?.scrollX,s=e?.scrollY;if(Number.isFinite(o)&&Number.isFinite(s)){if(t==="window")scrollTo(o,s),c=!0;else if(t)try{const r=document.querySelector(t);r&&(r.scrollLeft=o,r.scrollTop=s)}catch{}}}if(c)return;const i=location.hash.slice(1);if(i){const t=history.state?.__hashScrollIntoViewOptions??!0;if(t){const e=document.getElementById(i);e&&e.scrollIntoView(t)}return}scrollTo(0,0)})("tsr-scroll-restoration-v1_3");document.currentScript.remove()</script>
1<!--/$-->
1<script class="$tsr" id="$tsr-stream-barrier">(self.$R=self.$R||{})["tsr"]=[];self.$_TSR={h(){this.hydrated=!0,this.c()},e(){this.streamEnded=!0,this.c()},c(){this.hydrated&&this.streamEnded&&(delete self.$_TSR,delete self.$R.tsr)},p(e){this.initialized?e():this.buffer.push(e)},buffer:[]};$_TSR.router=($R=>$R[0]={manifest:$R[1]={routes:$R[2]={__root__:$R[3]={preloads:$R[4]=["/assets/index-hLjVoo_m.js","/assets/i18n-CMbmrGSa.js","/assets/qss-B4cMWIbE.js"],scripts:$R[5]=[$R[6]={attrs:$R[7]={type:"module",async:!0,src:"/assets/index-hLjVoo_m.js"}}]},"/$locale":$R[8]={preloads:$R[9]=["/assets/route-C6stfi0P.js","/assets/route-CLG_1kaG.js","/assets/Icons-B_6I98JM.js","/assets/schema-CCDEugzF.js","/assets/docs-navigation-BQJIrtXY.js"]},"/$locale/agents/":$R[10]={preloads:$R[11]=["/assets/agents-CvHSucn9.js","/assets/CopyButton-Ddsz8opC.js","/assets/agent-content-DT1CIFOH.js","/assets/TopicCards-i7c-hDVF.js"]}}},matches:$R[12]=[$R[13]={i:"__root__�",u:1791013827630,s:"success",ssr:!0},$R[14]={i:"�$locale�zh-cn",u:1791013827630,s:"success",b:$R[15]={locale:"zh-cn"},ssr:!0},$R[16]={i:"�$locale�agents��zh-cn�agents�",u:1791013827633,s:"success",ssr:!0}],lastMatchId:"�$locale�agents��zh-cn�agents�",dehydratedData:$R[17]={queryStream:$R[18]=($R[19]=(stream) => new ReadableStream({ start(controller) {
2	stream.on({
3		next(value) {
4			try {
5				controller.enqueue(value);
6			} catch (_error) {}
7		},
8		throw(value) {
9			controller.error(value);
10		},
11		return() {
12			try {
13				controller.close();
14			} catch (_error) {}
15		}
16	});
17} }))($R[20]=($R[21]=() => {
18	const buffer = [];
19	const listeners = [];
20	let alive = true;
21	let success = false;
22	let count = 0;
23	const internal = {
24		flush(value, mode, x) {
25			for (x = 0; x < count; x++) if (listeners[x]) listeners[x][mode](value);
26		},
27		up(listener, x, z, current) {
28			for (x = 0, z = buffer.length; x < z; x++) {
29				current = buffer[x];
30				if (!alive && x === z - 1) listener[success ? "return" : "throw"](current);
31				else listener.next(current);
32			}
33		},
34		on(listener, temp) {
35			if (alive) {
36				temp = count++;
37				listeners[temp] = listener;
38			}
39			internal.up(listener);
40			return () => {
41				if (alive) {
42					listeners[temp] = listeners[count];
43					listeners[count--] = void 0;
44				}
45			};
46		}
47	};
48	return {
49		__SEROVAL_STREAM__: true,
50		on(listener) {
51			return internal.on(listener);
52		},
53		next(value) {
54			if (alive) {
55				buffer.push(value);
56				internal.flush(value, "next");
57			}
58		},
59		throw(value) {
60			if (alive) {
61				buffer.push(value);
62				internal.flush(value, "throw");
63				alive = false;
64				success = false;
65				listeners.length = 0;
66			}
67		},
68		return(value) {
69			if (alive) {
70				buffer.push(value);
71				internal.flush(value, "return");
72				alive = false;
73				success = true;
74				listeners.length = 0;
75			}
76		}
77	};
78})())}})($R["tsr"]);document.currentScript.remove()</script>
78<script type="module" async="" src="/assets/index-hLjVoo_m.js"></script>
78<script>($R=>$R[20].return(void 0))($R["tsr"]);$_TSR.e();document.currentScript.remove()</script>
78</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.