1. TanStack Query v5 的 Suspense 集成与 Streaming SSR,如何与 React 19 / Solid.js 的并发渲染深度协同?
TanStack Query v5 的 Suspense 集成与 Streaming SSR 是如何与 React 19、Solid.js 的并发渲染深度协同的?
- Query v5 的 suspense: true 模式与 useSuspenseQuery 的语义
- Streaming SSR 下查询数据在服务端的预取与流式注入
- 与 React 19/Solid 并发渲染(Suspense、startTransition)的配合机制
Query v5 把 Suspense 从实验特性升级为一等公民:useSuspenseQuery 在数据未就绪时抛出 Promise 让最近的 Suspense 边界挂起,数据到达后自动恢复渲染,省去 isPending 分支;服务端渲染时,通过 prefetchQuery 在服务端把查询结果写入 queryClient,配合 React 19 的 Streaming SSR,Suspense 边界可以在数据未就绪时先流式输出占位内容,数据就绪后由服务器流式补发,客户端 hydrate 时查询缓存已就绪、无二次请求。与 Solid.js 协同同理:Solid 的 Suspense 与资源机制让查询在服务端可等待、在客户端可切换,Query 提供统一的缓存层。协同的关键是"查询状态交给 Query 管理、渲染挂起交给框架的 Suspense 机制",并用 streamed 数据填充缓存避免水合闪烁。
本题考察对"数据层与渲染层协作"的理解:Query 负责缓存与预取,Suspense/Streaming 负责渲染编排。答出"服务端 prefetch + 流式补发 + 客户端缓存复用"的完整链路,以及 useSuspenseQuery 相比 useQuery 的差异,即为满分回答。
import { useSuspenseQuery } from "@tanstack/react-query";
function Dashboard() {
const { data } = useSuspenseQuery({ queryKey: ["stats"], queryFn: fetchStats });
return <StatBoard data={data} />; // 无需 isPending 分支,Suspense 接管挂起
}