前端调用GraphQL addAddon接口时类型不匹配错误求助
解决React前端调用Addon GraphQL Mutation的类型不匹配问题
核心问题定位
你遇到的错误本质是前端传递的options参数结构不符合GraphQL Schema定义的AddOptionInput对象类型要求:Schema要求options是包含指定字段的对象数组,但前端直接传了纯ID字符串数组。
具体解决步骤
1. 确认GraphQL Schema定义
先核对你的AddOptionInput类型,它应该是类似这样的对象结构(而非纯ID类型):
input AddOptionInput { id: ID! # 可能还有其他字段,比如name、price等,根据你的实际Schema } input AddonInput { name: String! options: [AddOptionInput!]! # 其他Addon相关字段 } type Mutation { createAddon(addonInput: AddonInput!): Addon! }
如果AddOptionInput要求的是对象,就不能直接传ID字符串。
2. 修正前端组件的参数构造
把前端代码中构造addonInput.options的方式,从纯ID字符串数组改成包含id字段的对象数组:
错误写法:
// 错误:直接传ID字符串 const addonInput = { name: "额外配料", options: ["option_123", "option_456"] };
正确写法:
// 正确:每个元素是符合AddOptionInput的对象 const addonInput = { name: "额外配料", options: [ { id: "option_123" }, { id: "option_456" } // 如果AddOptionInput还有其他必填字段,也要一并传入 ] };
3. 验证Apollo Client的Mutation调用
确保你的Apollo Client mutation变量和Schema完全对齐,比如mutation定义:
const CREATE_ADDON = gql` mutation CreateAddon($addonInput: AddonInput!) { createAddon(addonInput: $addonInput) { id name options { id } } } `;
调用时传递的变量必须严格匹配AddonInput的结构,不能省略对象层级。
4. 核对后端Mutation处理逻辑
确认后端接收addonInput.options时,是按对象数组解析的,而不是直接解析为ID数组。比如如果用Node.js + GraphQL.js,处理函数应该接收每个option对象的id字段,而非直接接收字符串。
为什么之前改ID数组没用?
因为你的Schema定义的options字段类型是[AddOptionInput!]!(对象数组),而非[ID!]!(ID数组)。直接传ID字符串数组会触发类型校验失败,必须传递符合AddOptionInput结构的对象数组。
内容的提问来源于stack exchange,提问作者Parth Goti
相关产品推荐
相关产品推荐

