Expo/React Native中Tanstack Query的useQuery.error始终返回null
问题分析与解决方案
从你打印的query对象中可以看到关键线索:promise字段的错误提示为experimental_prefetchInRender feature flag is not enabled,这就是导致error始终为null的核心原因。
在TanStack Query v5中,默认不会在组件渲染的同步阶段执行queryFn(这是为了避免阻塞渲染线程)。如果你的组件在渲染时直接触发useQuery,且未开启experimental_prefetchInRender特性,查询会一直处于pending状态:
- 错误不会被赋值到
error字段,而是暂存到failureReason中 - 查询的
isError状态始终为false,status保持pending
解决步骤
修改app/layout.tsx中QueryClient的创建代码,开启experimental_prefetchInRender特性:
const query_client = new QueryClient({ queryCache: new QueryCache(), // 新增实验特性配置 experimental: { prefetchInRender: true, }, })
补充说明
开启该特性后,TanStack Query会允许在组件渲染阶段同步执行queryFn,此时queryFn抛出的错误会被正确捕获并赋值到error字段,isError状态也会变为true,你的错误分支逻辑就能正常触发。
如果你不想开启实验特性,也可以通过enabled选项延迟查询执行时机(比如绑定到用户交互事件):
const query = useQuery({ queryKey: ['test'], queryFn: async () => { if (true) { throw new Error('test') } }, // 初始不自动执行,需手动调用refetch触发 enabled: false, })
内容的提问来源于stack exchange,提问作者pedrohrbarros
相关产品推荐
相关产品推荐

