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

在Next.js中如何使用GraphQL传递动态账户查询变量?

解决GraphQL查询中传递account参数的问题

你直接在gql模板字符串里拼接account变量的方式有问题,会导致生成的查询语法错误——因为字符串类型的参数需要被引号包裹,而你直接插入变量后,查询里的Account_contains: ${account}会变成不带引号的裸字符串,不符合GraphQL语法规范,同时这种写法也存在安全风险(比如注入攻击)。

正确的做法是使用GraphQL的变量机制来传递参数,具体实现如下:

1. 定义带变量的查询

import { gql } from '@apollo/client'; // 若使用其他GraphQL库,导入方式类似

const GET_ACTIVE_ITEM = gql`
  query GetActiveItems($account: String!) {
    activeFiles(
      first: 5
      where: { Account_contains: $account }
    ) {
      id
      tokenId
      ipfsHash
      Account
      Privilege
    }
  }
`;

这里定义了名为GetActiveItems的查询,声明了变量$account并指定类型为String!(!表示该变量为必填项),随后在查询条件中引用这个变量。

2. 调用查询时传递变量值

以Apollo Client为例,调用查询时通过variables参数传入account的值:

let account = '0x74c7b157af4E5418F03eb928DF309cc98CE38E66';

// 使用useQuery钩子的场景
const { loading, error, data } = useQuery(GET_ACTIVE_ITEM, {
  variables: { account },
});

// 使用client.query方法的场景
client.query({
  query: GET_ACTIVE_ITEM,
  variables: { account },
})
.then(result => console.log(result.data))
.catch(error => console.error(error));

这种方式既符合GraphQL语法规范,又避免了直接拼接字符串带来的问题,代码也更易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:07:16