我在用变量创建突变时遇到了问题。我可以让它直接包含值,比如:
export const orderCancellation = gql`
mutation{
cancelOrder(input: {id: 2649, cancellationReasonId: 1 } ) {
order{
id,
isCancelled
}
}
}`;
但当尝试使用变量时,什么都不起作用:
export const orderCancellation = gql`
mutation cancelOrder($id: ID!, $cancellationReasonId: ID!) {
cancelOrder(input: {id: $id, cancellationReasonId: $cancellationReasonId }) {
order {
id,
isCancelled
}
}
}`;
来自我们服务器的自定义错误消息:
Didn't find any result for 'CancelOrderPayload' with the arguments '{:input=>#<#<Class:0x00005608dca67e90>:0x00005608e10cd790 @context=#<Query::Context ...>, @ruby_style_hash={:id=>nil, :cancellation_reason_id=>nil}, @arguments=#<GraphQL::Execution::Interpreter::Arguments @keyword_arguments={:id=>nil, :cancellation_reason_id=>nil}>, @maybe_lazies=[]>}.
这就是我所说的突变:
this.apollo.mutate({
mutation: orderCancellation,
variables: {id: orderId, cancellationReasonId: reasonId}
});
有人知道我做错了什么吗?也许是服务器端的问题?
编辑1:这是带有变量实现的请求负载(取自Chrome DevTools上的"网络"选项卡(:
operationName: "cancelOrder"
query: "mutation cancelOrder($id: ID!, $cancellationReasonId: ID!) {↵ cancelOrder(input: {id: $id, cancellationReasonId: $cancellationReasonId}) {↵ order {↵ id↵ isCancelled↵ __typename↵ }↵ __typename↵ }↵}↵"
variables: {id: "3045", cancellationReasonId: "1"}
编辑2:已经尝试过这样声明突变:
export const orderCancellation = gql`
mutation cancelOrder($input: CancelOrderInput!) {
cancelOrder(input: $input) {
order {
id,
isCancelled
}
}
}`;
this.apollo.mutate({
mutation: orderCancellation,
variables: {input: {id: orderId, cancellationReasonId: reasonId}}
});
我们找出了问题所在。我们的服务器已将突变的ID声明为Integer!,而不是ID!。这就是字符串ID处理查询而不处理突变的原因。谢谢你的努力!