TanStack useQuery中AbortSignal为undefined的场景有哪些?
React Query queryFn中signal为undefined的具体场景
在TanStack React Query v4中,queryFn接收的signal参数会在以下场景中为undefined:
- 手动调用
queryClient.fetchQuery/prefetchQuery且未传入自定义signal:React Query不会为这类手动触发的查询自动生成AbortSignal,只有主动传递signal时,queryFn才会接收到有效值。 enabled: false的查询通过refetch()手动执行:当useQuery配置了enabled: false,后续通过refetch()方法触发查询时,不会创建AbortSignal,此时signal为undefined。- 使用了不支持signal的旧版兼容逻辑:在从v3升级到v4的过渡代码中,或是使用某些已废弃的查询初始化方式时,可能不会传递signal,但这种情况非常罕见。
简化代码的方案
为避免频繁判断signal是否存在,可以给参数设置兜底的空AbortSignal:
queryFn: async ({ signal = new AbortController().signal }) => { // 直接使用signal,无需额外判断 const res = await fetch('/todos', { signal }); return res.json(); }
这个兜底的signal不会触发取消操作,但能让你不用处理undefined的情况,简化代码逻辑。
内容的提问来源于stack exchange,提问作者Julio Garcia
相关产品推荐
相关产品推荐

