现在,成功完成突变后,我再次发送了更新数据的请求。我想消除第二个请求。
根据Apollo docs,如果实现对象ID,则可以免费获取缓存更新。这依赖于graphql服务器返回可以由Apollo标准化的响应(带有更新的数据)。
突变响应只能包含我对象的一些字段吗?例如,我有一个Hero
对象,它定义了英雄的name
和age
。但是用户界面仅允许用户更改名称。我可以只返回英雄的name
来保持age
不变吗?
答案 0 :(得分:0)
是的,您可以以与mutation
相同的方式从query
的结果中查询所需的任何字段。您只需在更新对象后返回它即可。
例如:
mutation {
updateHero(newHero: { name: "John Doe" }) {
name
}
}
还有一件事。尽管建议从mutation
返回更新的对象,但另一方面,也建议根据UI需求设计GraphQL服务器。因此,如果您认为更新后不需要整个对象,则始终可以只返回名称。
在此架构中,您的架构如下所示:
Mutation {
updateHero(newHero: UpdateHeroInput!): String!
}
对应的查询将是:
mutation {
updateHero(newHero: { name: "John Doe" })
}
请注意,由于返回单个标量值(字符串),因此没有选择字段。