1. TanStack Query v5 useSuspenseQuery/useSuspenseInfiniteQuery 的工程价值
TanStack Query v5 中 useSuspenseQuery 与 useSuspenseInfiniteQuery 相比普通 useQuery 在工程上有什么价值?
- Suspense 模式下数据加载与渲染的协调
- 取消手动管理 loading 状态的三态样板
- 与 React 并发特性(Suspense、transition)的配合
useSuspenseQuery 让组件在数据未就绪时直接 suspend,由最近的 Suspense 边界负责展示 fallback,从而消除了组件内部手写的 isLoading 分支。useSuspenseInfiniteQuery 除了自动分页,还支持按页码/游标逐页 suspend,配合 initialPageParam 与 getNextPageParam 实现滚动加载。工程上它让数据加载更像"声明式资源",减少每个页面重复的三态(loading/error/data)样板,并能使整个渲染树在 load 期间被协调器优先处理,配合 useTransition 在旧新内容间平滑过渡,避免瀑布流中的闪烁。
普通 useQuery 保留 loading 状态是"命令式"的,而 Suspense 版本把加载状态交给 React 协调器,语义更接近稳定渲染,配合 useTransition 还能在旧内容与新内容间平滑过渡。
const { data } = useSuspenseQuery({ queryKey: ['user', id], queryFn: () => fetchUser(id) });
// 无需 if (isLoading),由 <Suspense fallback={...}> 负责