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

使用@apollo/client的useQuery时出现GraphQL DocumentNode错误求助

解决Apollo Client useQuery报错:Invariant Violation: Argument of [object Object] passed to parser was not a valid GraphQL DocumentNode

问题根源

你定义的categoriesQuery是一个包含query字段的对象,但useQuery的第一个参数要求直接传入GraphQL DocumentNode实例(即gql标签编译后的结果),而非包裹它的对象。这就是为什么该查询在getStaticProps中可用——因为服务端调用apolloClient.query()时,你是将categoriesQuery.query传给了配置的query字段,而组件中直接传递整个对象导致类型不匹配。

解决方法

方案一:直接导出DocumentNode(推荐)

修改查询文件,去掉外层对象,直接导出gql编译后的结果:

// @/gqlQueries/categories.js
import {gql} from "@apollo/client";

const categoriesQuery = gql`
    query {
        mainPage(id:"5wrEkvwy8F87kF5d6WQxCL") {
            featuredCategoriesCollection {
                items {
                    metaTitle
                    metaDescription
                    title
                    description
                    image {
                        url
                    }
                    bg
                    slug
                }
            }
        }
    }
`;

export default categoriesQuery;

组件中正常使用:

import categoriesQuery from "@/gqlQueries/categories";
import {useQuery} from "@apollo/client";

const CategoryProduct = ({ updateProductCategory }) => {
    const { data, loading, error } = useQuery(categoriesQuery)
    // 后续业务逻辑
}

方案二:保留原结构,传递对象的query字段

如果需要保留原查询对象的结构(比如复用其他配置项),组件中传入对象的query属性即可:

import categoriesQuery from "@/gqlQueries/categories";
import {useQuery} from "@apollo/client";

const CategoryProduct = ({ updateProductCategory }) => {
    const { data, loading, error } = useQuery(categoriesQuery.query)
    // 后续业务逻辑
}

补充说明

你在getStaticProps中能正常使用的原因是:服务端的apolloClient.query()方法接收的是一个配置对象,其中query字段才是需要的DocumentNode,你之前的写法应该类似这样:

export async function getStaticProps(context) {
  const { data } = await apolloClient.query({
    query: categoriesQuery.query // 这里正确取到了DocumentNode
  });
  return { props: { data } };
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:27:13