2015-11-02 122 views
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 
    }; 
    } 
} 

现在我有一个名为ContainerProgramCard一个fragment这样的:

fragment on Program { 
    name, 
    assessmentLink, 
    subjectSubscription, 
    ${ProgramAutoInviteToggle.getFragment('program')} 
    ${ProgramSubjectRegistrationLink.getFragment('program')} 
} 

MutationProgramAutoInviteToggle调用,应切换此ProgramsubjectSubscription字段的值。 在ProgramCard渲染方法中,我想根据subjectSubscription值显示或不显示ProgramSubjectRegistrationLink

问题是由客户端的实际突变如下:

query: 
    mutation ProgramSetSubjectSubscription($input_0:ProgramSetSubjectSubscriptionInput!){programSetSubjectSubscription(input:$input_0){clientMutationId}} 

variables: 
    { 
    "input_0": { 
    "programID": "UHJvZ3JhbTo1NjM2OTY1MzFiZGM3MzI1MmFlYTk4MWE=", 
    "subjectSubscription": false, 
    "clientMutationId": "0" 
    } 
} 

没有subjectSubscription场的痕迹。为什么??

非常感谢你对我的帮助。我真的不知道!

+0

Somone能帮助我吗? 我有很多其他案例,我无法正确更新我的商店。 –

回答

0

它是否正确拼写fieldIDs

getConfigs() { 
    return [ 
    { 
     type: 'FIELDS_CHANGE', 
     fieldIDs: { // Instead of `fieldsIDs` 
     program: this.props.program.id 
     } 
    } 
    ]; 
}