0
我不明白如何跟踪查询的工作。了解跟踪查询
这里有一块我的应用程序:
GRAPHQL
type Admin implements Node {
id: ID!
program(slug: String!): Program
}
type Program implements Node {
id: ID!
slug: String!
assessmentLink: String!
subjectSubscription: Boolean!
}
input ProgramSetSubjectSubscriptionInput {
programID: ID!
subjectSubscription: Boolean!
clientMutationId: String!
}
type ProgramSetSubjectSubscriptionPayload {
program: Program
clientMutationId: String!
}
type Mutations {
programSetSubjectSubscription(input: ProgramSetSubjectSubscriptionInput!): ProgramSetSubjectSubscriptionPayload
}
服务器端突变
import {
GraphQLBoolean,
GraphQLFloat,
GraphQLID,
GraphQLInt,
GraphQLList,
GraphQLNonNull,
GraphQLObjectType,
GraphQLInputObjectType,
GraphQLSchema,
GraphQLString
} from 'graphql';
import {
fromGlobalId,
mutationWithClientMutationId,
cursorForObjectInConnection,
offsetToCursor
} from 'graphql-relay';
import _ from 'lodash';
import db from '../../db';
import Program from '../types/Program';
import Admin, { ProgramEdge } from '../types/Admin';
export default mutationWithClientMutationId({
name : 'ProgramSetSubjectSubscription',
inputFields : {
programID : {
type : new GraphQLNonNull(GraphQLID)
},
subjectSubscription : {
type : new GraphQLNonNull(GraphQLBoolean)
}
},
async mutateAndGetPayload({ programID, subjectSubscription }) {
const Program = db.model('Program');
const localProgramId = fromGlobalId(programID).id;
const program = await Program.findById(localProgramId).exec();
program.subjectSubscription = subjectSubscription;
await program.save();
return {
localProgramId : program.id
};
},
outputFields : {
program : {
type : Program,
async resolve({ localProgramId }) {
const Program = db.model('Program');
return await Program.findById(localProgramId).exec();
}
}
}
});
客户端突变
import Relay from 'react-relay';
export default class ProgramSetSubjectSubscription extends Relay.Mutation {
static fragments = {
program() {
return Relay.QL`
fragment on Program {
id
}
`
}
};
getMutation() {
return Relay.QL`mutation{programSetSubjectSubscription}`;
}
getFatQuery() {
return Relay.QL`
fragment on ProgramSetSubjectSubscriptionPayload {
program {
subjectSubscription
}
}
`;
}
getConfigs() {
return [
{
type: 'FIELDS_CHANGE',
fieldsIDs : {
program : this.props.program.id
}
}
];
}
getVariables() {
return {
programID : this.props.program.id,
subjectSubscription : this.props.subjectSubscription
};
}
}
现在我有一个名为Container
与ProgramCard
一个fragment
这样的:
fragment on Program {
name,
assessmentLink,
subjectSubscription,
${ProgramAutoInviteToggle.getFragment('program')}
${ProgramSubjectRegistrationLink.getFragment('program')}
}
的Mutation
由ProgramAutoInviteToggle
调用,应切换此Program
subjectSubscription
字段的值。 在ProgramCard
渲染方法中,我想根据subjectSubscription
值显示或不显示ProgramSubjectRegistrationLink
。
问题是由客户端的实际突变如下:
query:
mutation ProgramSetSubjectSubscription($input_0:ProgramSetSubjectSubscriptionInput!){programSetSubjectSubscription(input:$input_0){clientMutationId}}
variables:
{
"input_0": {
"programID": "UHJvZ3JhbTo1NjM2OTY1MzFiZGM3MzI1MmFlYTk4MWE=",
"subjectSubscription": false,
"clientMutationId": "0"
}
}
没有subjectSubscription
场的痕迹。为什么??
非常感谢你对我的帮助。我真的不知道!
Somone能帮助我吗? 我有很多其他案例,我无法正确更新我的商店。 –