You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 13:01:01