我正在通过阅读 todo 示例来学习 graphql/relay。
突变模式定义如下:
const GraphQLChangeTodoStatusMutation = mutationWithClientMutationId({
name: 'ChangeTodoStatus',
inputFields: {
complete: { type: new GraphQLNonNull(GraphQLBoolean) },
id: { type: new GraphQLNonNull(GraphQLID) },
},
outputFields: {
todo: {
type: GraphQLTodo,
resolve: ({localTodoId}) => getTodo(localTodoId),
},
viewer: {
type: GraphQLUser,
resolve: () => getViewer(),
},
},
mutateAndGetPayload: ({id, complete}) => {
const localTodoId = fromGlobalId(id).id;
changeTodoStatus(localTodoId, complete);
return {localTodoId};
},
});
中继突变在这里定义,并调用如下:
this.props.relay.commitUpdate(
new ChangeTodoStatusMutation({
complete,
todo: this.props.todo,
viewer: this.props.viewer,
})
);
我只是对 schmea 中的 outputFileds 从未在调用者中使用感到困惑,并且看起来与中继中的胖查询无关。谁能详细解释一下?
无论如何,我的最终目标是在 grapahql/relay 中实现身份验证(如下所示),这需要获取突变模式中定义的输出,但我不知道如何去做。
mutation {
createToken(username: String!, password: String!) {
token
error
}
}