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

如何使用Apollo Client发送无嵌套字段的GraphQL查询

问题:Next.js中使用Apollo Client发送简单GraphQL查询报错

我在Next.js项目里用Apollo Client的gql和useQuery请求GraphQL接口,目标查询fetchBoardsCount在API演示环境能正常运行,但项目里报错。

接口定义与可用查询

// 接口文档定义
fetchBoardsCount: Int!

// 可正常运行的查询语句
query {
  fetchBoardsCount
}

我的错误代码

// 查询定义
export const FETCH_BOARDS_COUNT = gql`{
    query FetchBoardsCount {
        fetchBoardsCount
    }
}`;

// 请求逻辑
const { data, loading, error } = useQuery(FETCH_BOARDS_COUNT);

错误提示

Cannot query field "query" on type "Query".

疑问:怎么用Apollo Client发送这种无子查询、无嵌套字段的简单GraphQL查询?

项目依赖

"dependencies": {
    "@apollo/client": "^3.7.1",
    "graphql": "^16.6.0",
    "next": "12.3.1",
    "react": "18.2.0",
    "react-dom": "18.2.0"
  },
  "devDependencies": {
    "@types/node": "18.11.0",
    "@types/react": "18.0.21",
    "eslint": "8.25.0",
    "eslint-config-next": "12.3.1",
    "typescript": "4.8.4"
  }

解决方案

问题出在查询语句的语法错误:你在gql模板里给查询多套了一层外层花括号,导致Apollo把query当成了Query类型下的字段,而非查询关键字。

修正后的查询有两种写法:

写法1:简写形式(省略查询名称)

export const FETCH_BOARDS_COUNT = gql`
  query {
    fetchBoardsCount
  }
`;

写法2:标准命名形式(推荐,方便调试和日志追踪)

export const FETCH_BOARDS_COUNT = gql`
  query FetchBoardsCount {
    fetchBoardsCount
  }
`;

重点:gql模板字符串直接写完整的GraphQL查询语句即可,不需要额外在外层加花括号。你之前的写法相当于让GraphQL去查询Query类型下的query字段,这和接口定义不符,所以报错。

修正后正常使用useQuery即可获取数据:

const { data, loading, error } = useQuery(FETCH_BOARDS_COUNT);

if (data) {
  console.log('看板总数:', data.fetchBoardsCount);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:46:04