在GraphQL Mutate函数中传递正确类型的ID
解决GraphQL Error: Variable $id of required type ID! was not provided的问题
嘿,这个问题其实挺常见的,我来帮你一步步搞定它!
直接原因:变量名不匹配
你看到的错误提示核心问题很明确:你的GraphQL mutation期望接收一个名为$id的必填变量,但你调用mutate时传的是_id,变量名完全不对应,导致服务器认为你没提供$id。
解决步骤
1. 修正变量名
直接把mutate调用里的变量名改对就行,把_id换成id,代码修改如下:
_onEditPress = async () => { const { id, text } = this.state; // 将变量从 _id: id 改为 id: id(可简写为id) await this.props.mutate({ variables: { id, text } }); Keyboard.dismiss(); this.props.navigation.goBack(null); }
2. 关于ID类型的疑问
你担心的字符串转ID类型问题其实不用纠结——GraphQL的ID!类型本身就支持字符串格式的输入(比如MongoDB的ObjectId字符串),只要你的this.state.id是一个非空的合法字符串,直接传递就行,不需要做任何额外转换。
额外检查点
- 可以在
_onEditPress里先打印id的值,确认它不是空字符串或undefined:console.log('当前要修改的ID:', id); - 确认你的
UPDATE_CHAT_MUTATIONS定义里,变量名确实是$id,比如类似这样的结构:mutation UpdateChat($id: ID!, $text: String!) { updateChat(id: $id, text: $text) { id text } }
这样修改后,应该就能正常触发mutation修改数据啦!
内容的提问来源于stack exchange,提问作者Hendry Lim
相关产品推荐
相关产品推荐

