2015-11-02 55 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 
     } 
    } 
    ]; 
}