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

NextJS+Pocketbase用react-query的useMutation报错:this.client.defaultMutationOptions is not a function

解决React Query useMutation报错:TypeError: this.client.defaultMutationOptions is not a function

问题原因

这个错误的核心原因是React Query的客户端实例没有在组件树中正确配置,导致useMutation无法访问到有效的QueryClient上下文。在Next.js App Router(使用"use client"指令)的场景下,必须确保上层组件已通过QueryClientProvider提供QueryClient实例。

解决步骤

1. 确认依赖版本

确保安装的是最新版的TanStack React Query(原react-query已迁移到@tanstack/react-query):

npm install @tanstack/react-query
# 或
yarn add @tanstack/react-query

2. 在根组件中配置QueryClientProvider

以Next.js App Router为例,修改app/layout.tsx(需添加"use client"指令,因为涉及客户端状态管理):

"use client";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { ReactNode } from "react";

const queryClient = new QueryClient();

export default function RootLayout({ children }: { children: ReactNode }) {
  return (
    <html lang="en">
      <body>
        <QueryClientProvider client={queryClient}>
          {children}
        </QueryClientProvider>
      </body>
    </html>
  );
}

3. 修正useLogin自定义Hook

确保login函数逻辑正确,同时规范useMutation的调用方式:

"use client";
import pb from "@/lib/pocketbase";
import { useMutation } from "@tanstack/react-query";

export default function useLogin() {
  async function login({ email, password }: { email: string; password: string }) {
    // 返回认证数据,方便后续业务处理
    return await pb.collection("users").authWithPassword(email, password);
  }

  return useMutation({
    mutationFn: login,
    // 可选:添加成功/失败回调便于调试
    onSuccess: (data) => {
      console.log("登录成功", data);
    },
    onError: (error) => {
      console.error("登录失败", error);
    },
  });
}

额外说明

如果使用的是旧版react-query(而非@tanstack/react-query),配置逻辑类似,但导入路径需改为react-query。另外,所有使用useMutation/useQuery的组件必须包裹在QueryClientProvider范围内,否则会持续出现上下文缺失类错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:12:34