我正在通过修改 TODO 示例来创建我的第一个 React/Relay 应用程序。我已经到了为具有参数 bookCount 的对象分发器添加自己的突变的地步。变异被称为 AddBook 并且只是将书籍计数增加 1。此时,变异执行没有错误,乐观地将 bookCount 正确地增加 1,但是当它收到来自服务器的响应时恢复模型更改。我相信这是因为来自服务器的响应神秘地不包含我指定的任何输出字段。
这是我的突变:
var GraphQLAddBookMutation = mutationWithClientMutationId({
name: 'AddBook',
inputFields: {
},
outputFields: {
distributor: {
type: GraphQlDistributor,
resolve: () => getDistributor(),
},
},
mutateAndGetPayload: () => {
console.log("Trying to mutate.");
addBook();
return {};
},
});
它在 outputFields 中包含字段“distributor”,但 graphql 响应中不包含“distributor”数据。
graphql 响应是:
{
"data": {
"addBook": {
"clientMutationId": "0"
}
}
}
我已经验证了 mutateAndGetPayload 函数会被调用,但分发器解析函数不会被调用。
我本来希望 outputFields 中的每个字段都包含在 graphql 响应中,并且 outputFields 中的每个解析函数都被调用以填充响应中的适当参数,但事实并非如此
这让我特别困惑,因为生成的 schema.json 确实包含我在 AddBookPayload 中指定的任何 outputFields:
{
"kind": "OBJECT",
"name": "AddBookPayload",
"description": null,
"fields": [
{
"name": "distributor",
"description": null,
"args": [],
"type": {
"kind": "OBJECT",
"name": "Distributor",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
"name": "clientMutationId",
"description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
"name": "String",
"ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
}
],
"inputFields": null,
"interfaces": [],
"enumValues": null,
"possibleTypes": null
},