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

useQuery(tanstack/react-query)非函数TypeError问题求助

解决TypeError: useQuery不是函数的问题

核心问题:自定义Hook不能是异步函数

你的useFetchProducts被定义为async function,但React Hook必须是同步执行的。async函数会返回Promise,这会破坏React的Hook规则,导致React无法正确识别内部调用的useQuery,进而抛出看似是导入错误的异常。

修复步骤

1. 移除自定义Hook的async关键字

queryFn本身可以是异步函数,但整个自定义Hook不能是异步的,修改代码如下:

import { useQuery } from "@tanstack/react-query";
import Stripe from "stripe";

// 移除async关键字
export default function useFetchProducts() {
  async function getStripeProducts() {
    const stripe = new Stripe(process.env.STRIPE_SECRET ?? "", {
      apiVersion: "2023-10-16",
    });

    const res = await stripe.prices.list({
      expand: ["data.product"],
    });

    const prices = res.data;
    return prices;
  }

  return useQuery({ queryKey: ["stripeProducts"], queryFn: getStripeProducts });
}

2. 确认已配置React Query Provider

如果应用根组件没有包裹QueryClientProvider,useQuery无法正常初始化,也会触发类似错误,补充配置:

import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import App from "./App";

const queryClient = new QueryClient();

function Root() {
  return (
    <QueryClientProvider client={queryClient}>
      <App />
    </QueryClientProvider>
  );
}

export default Root;

3. 检查依赖版本与缓存

  • 确认安装的是@tanstack/react-query(v4+版本),旧版v3的包名为react-query,导入路径需对应修改为import { useQuery } from 'react-query'。
  • 清理依赖缓存后重新安装:
rm -rf node_modules package-lock.json
npm install

内容的提问来源于stack exchange,提问作者Malik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:04:54