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

React Query调用重载不匹配:useProfile钩子创建问题(Next.js14)

解决React Query useQuery TypeScript错误(错误码2769)

这个错误的核心原因是React Query v4+的API变更——它不再支持把单个字符串作为useQuery的第一个参数,必须传入数组形式的QueryKey,同时你的服务层返回类型也存在不合理的地方。

具体修复步骤:

  1. 更新useQuery的参数格式
    React Query v4要求第一个参数是QueryKey(数组类型,用于缓存标识),替换原来的字符串参数。同时显式指定泛型,让TypeScript正确推断数据类型。

  2. 修正服务层的返回类型
    获取当前用户的接口/@me应该返回单个用户对象,而不是数组,所以把instance<IUser[]>改成instance<IUser>。


修改后的代码

hooks/useProfile.ts

import { useQuery } from '@tanstack/react-query';
import { UserService } from '@/services/user.service';
import { IUser } from '@/types/user.interface';

export const useProfile = () => {
  // 第一个参数改为数组形式的QueryKey,同时指定泛型
  const { data } = useQuery<IUser>(['get-profile'], () => UserService.getProfile());

  return { profile: data };
};

services/user.service.ts

import { instance } from '@/api/api.interceptor';
import { IUser } from '@/types/user.interface';

const USERS = 'users';

type TypeData = {
  username: string;
  email: string;
  avatar: string;
  banner: string;
};

export const UserService = {
  async getProfile() {
    // 修正返回类型为单个IUser,而非数组
    return instance<IUser>({
      url: `/${USERS}/@me`,
      method: 'GET',
    });
  },

  async updateProfile(data: TypeData) {
    // 如果更新接口也是返回单个用户,这里同样建议改成<IUser>
    return instance<IUser>({
      url: `/${USERS}/@me`,
      method: 'PUT',
      data,
    });
  },
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:02:22