5月30日 00:37

React Query 有哪些高级特性?依赖查询和并行查询怎么用?

React Query 的高级特性主要解决三个问题:按条件发请求、同时发多个请求、让缓存数据在合适时机变新。依赖查询用 enabled 控制执行时机;并行查询用多个 useQuery 或 useQueries;窗口聚焦重新获取用 refetchOnWindowFocus 保证页面回来时数据不过期。回答时要补一句:这些能力都围绕服务器状态,不是替代本地 UI 状态。

追问

依赖查询为什么不用 if 包住 useQuery?

Hook 不能放进条件语句里,否则调用顺序会变。正确做法是始终调用 useQuery,用 enabled: !!id 控制是否真正请求。

多个 useQuery 和 useQueries 怎么选?

数量固定时直接写多个 useQuery,可读性更好。数量来自数组时用 useQueries,例如按一批 id 拉详情。

refetchOnWindowFocus 会不会导致请求太多?

会,所以后台管理页、实时看板适合开启;编辑表单、低频静态数据可以关闭,或配合 staleTime 降低重复请求。

无限滚动靠什么实现?

用 useInfiniteQuery,关键是 getNextPageParam 返回下一页参数,返回 undefined 表示没有更多。

写段代码

javascript
const user = useQuery({ queryKey: ['user', id], queryFn: getUser }); const posts = useQuery({ queryKey: ['posts', user.data?.id], queryFn: () => getPosts(user.data.id), enabled: !!user.data?.id, staleTime: 60_000, refetchOnWindowFocus: true, }); const results = useQueries({ queries: ids.map(id => ({ queryKey: ['todo', id], queryFn: () => getTodo(id) })) });
标签:React