能否在GraphQL Mutation中使用$child.name替代$child_name?
当然可行!但要注意变量类型和Schema的匹配
完全可以把$child_name这种标量变量替换成$child.name的对象属性引用方式,不过得确保你的变量定义和后端GraphQL Schema的要求对应上,我给你分两种常见场景讲清楚:
场景1:直接在Mutation参数中引用对象变量的属性
如果你的Mutation原本就接受单独的name参数,只是想把变量从标量改成对象的属性引用,写法是这样的:
调整后的Mutation代码
mutation CreateChild($child: ChildInput!) { createChild(name: $child.name) { id name } }
对应的变量值
你需要传入一个包含name属性的对象:
{ "child": { "name": "Luna" } }
关键要求
- 必须在Mutation的变量定义里声明
$child的类型(比如上面的ChildInput),这个类型需要在你的后端Schema中提前定义,比如:
input ChildInput { name: String! # 还可以加其他字段,比如 age: Int }
- 变量对象的属性名(
name)要和Schema中定义的字段严格匹配,大小写敏感。
场景2:把整个对象作为参数传给Mutation
如果你的后端Schema已经支持接收一个完整的ChildInput对象作为Mutation参数,那更推荐这种写法,代码会更简洁:
调整后的Mutation代码
mutation CreateChild($child: ChildInput!) { createChild(child: $child) { id name } }
对应的变量值
同样传入包含name的对象:
{ "child": { "name": "Luna" } }
后端Schema要求
你的Mutation字段需要定义为接受ChildInput类型的参数:
type Mutation { createChild(child: ChildInput!): Child } input ChildInput { name: String! }
注意事项
- 如果原来的后端Schema只支持单独的
name标量参数,那你要么调整后端Schema来支持对象输入,要么只能用场景1的方式(前提是先定义对象类型变量)。 - 变量名和属性名一定要和Schema保持一致,别出现拼写错误,GraphQL对大小写和字段名的匹配是严格的。
内容的提问来源于stack exchange,提问作者user4412054
相关产品推荐
相关产品推荐

