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

使用GraphQL Query组件时category未定义错误排查(不使用Hooks)

解决GraphQL Query组件中变量未定义的问题

核心问题分析

你错误地在gql模板字符串中使用了JavaScript的模板插值${category},但这个变量在定义查询时并未存在,且这不符合GraphQL的变量传递规范。GraphQL有自己的变量系统,不需要用JS模板语法插入变量。

正确的解决方案

1. 修正查询定义

将查询改为使用GraphQL原生的变量语法,在查询开头声明变量及其类型,然后在查询逻辑中引用该变量:

import { gql, Query } from '@apollo/react-components';

// 正确定义带变量的查询
const LOAD_PRODUCTS = gql`
  # 声明变量$category,类型根据你的Schema调整,比如String!表示非空字符串
  query LoadProducts($category: String!) {
    products(category: { title: $category }) {
      id
      name
      price
      # 其他你需要的字段
    }
  }
`;

这里的$category是GraphQL变量,需要和你Schema中products查询接受的参数类型匹配(如果你的category input类型要求title是字符串,就用String!;如果是枚举等其他类型,改成对应的类型即可)。

2. 正确调用Query组件

保持你原来的调用方式即可,现在变量会通过variables props正确传递给GraphQL查询:

<Query query={LOAD_PRODUCTS} variables={{ category: "all" }}>
  {({ loading, error, data }) => {
    if (loading) return <p>加载中...</p>;
    if (error) return <p>错误: {error.message}</p>;
    
    return (
      <div>
        {data.products.map(product => (
          <div key={product.id}>{product.name}</div>
        ))}
      </div>
    );
  }}
</Query>

关键注意事项

  • 确保你的GraphQL Schema中,products查询的category参数确实接受包含title字段的input类型,否则需要调整查询中的参数结构。
  • 不要混淆JavaScript模板字符串插值和GraphQL变量:前者是JS层面的字符串拼接,后者是GraphQL规范的变量传递方式,能保证类型安全和查询复用性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:35:41