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

自定义React Query Hook重命名返回data属性为customUser的实现问题

React Query 自定义Hook重命名data属性实现方案

最简实现代码

直接在自定义Hook内部解构useQuery返回值时完成重命名,不需要的属性直接不接收即可:

import { useQuery } from '@tanstack/react-query'
// 替换为你自己的用户请求方法
import { getUserInfo } from './api/user'

const useUserInfo = (userId: string | number) => {
  // 解构时用冒号语法完成重命名,仅接收data属性,其余冗余属性直接丢弃
  const { data: customUser } = useQuery({
    queryKey: ['userInfo', userId],
    queryFn: () => getUserInfo(userId)
  })
  // 仅返回重命名后的属性,无冗余字段
  return { customUser }
}

业务侧调用示例

同文件调用多个Hook不会出现变量重名冲突:

const UserPage = () => {
  // 调用第一个用户查询
  const { customUser: currentUser } = useUserInfo('1001')
  // 调用第二个用户查询
  const { customUser: adminUser } = useUserInfo('admin')

  return (
    <div>
      <p>当前用户:{currentUser?.nickname}</p>
      <p>管理员:{adminUser?.nickname}</p>
    </div>
  )
}

常见失效原因

之前重命名后功能无法正常运行,大概率是犯了以下错误:

  • 把解构重命名的冒号语法写错成默认值等号语法:const { data = customUser },该写法是给data设置默认值为customUser,完全不符合重命名需求
  • 对data做了额外的响应式丢失操作:比如在Hook内写了const customUser = { ...data }这种浅拷贝操作,破坏了React Query的响应式更新逻辑
  • TS场景下没有给useQuery设置正确的泛型,导致返回的customUser类型不符合预期,只需要给useQuery传入你的用户数据类型即可:useQuery<UserType>({...})

内容的提问来源于stack exchange,提问作者Jesper van den Munckhof

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:24:04