2016-06-14 28 views
0

我通过阅读待办事项样本学习graphql /继电器。在继电器中,如何获取graphql中定义的outputFilelds?

突变模式的定义如下:

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}; 
    }, 
}); 

继电器突变定义here,并呼吁象下面这样:

this.props.relay.commitUpdate(
    new ChangeTodoStatusMutation({ 
    complete, 
    todo: this.props.todo, 
    viewer: this.props.viewer, 
    }) 
); 

我只是困惑从未使用schmea的outputFileds在调用者中,并且与继电器中的胖查询无关。任何人都可以请详细解释一下吗?

不管怎样,我的最终目标是实现grapahql /继电器(如下图所示),这就需要得到突变模式定义的输出验证,但我不知道怎么样。

mutation { 
    createToken(username: String!, password: String!) { 
    token 
    error 
    } 
} 

回答

1

如果你想直接得到outputFields,而不是用它们来更新客户端的商店,你可以定义onSuccess功能,并通过response对象访问它们。

const onSuccess = response => { 
    if (response.createToken.error) { 
     console.log('Could not create token. Got error: ' + error); 
    } else { 
     // store response.createToken.token for future use. 
    } 
}; 
this.props.relay.commitUpdate(
    new CreateTokenMutation({username, password}), 
    {onSuccess} 
); 

在您的客户端突变实现即CreateTokenMutation,你必须指定的outputFields并不意味着更新客户商店。所以,你将使用REQUIRED_CHILDREN mutator配置。

class CreateTokenMutation extends Relay.Mutation { 
    getMutation() { 
    return Relay.QL`mutation {createToken}`; 
    } 

    getVariables() { 
    return { 
     username: this.props.username, 
     password: this.props.password, 
    }; 
    } 

    getFatQuery() { 
    return Relay.QL` 
     fragment on CreateTokenPayload @relay(pattern: true) { 
     token, 
     error, 
     } 
    `; 
    } 

    getConfigs() { 
    return [{ 
     type: REQUIRED_CHILDREN, 
     children: [ 
     Relay.QL` 
      fragment on CreateTokenPayload { 
      token, 
      error, 
      } 
     `, 
     ], 
    }]; 
    } 
} 

要了解更多信息,请检查Relay documentation on mutation

+0

得到它,我应该更仔细地阅读正式文件。 :) – Ron

相关问题