2016-05-20 7 views
6

मेरे पास एक पृष्ठ है जो ग्राफ़क्लुएल रिले कनेक्शन का उपयोग करता है जो drafts प्राप्त करता है।कनेक्शन के लिए ग्राफिकल रिले उत्परिवर्तन RANGE_ADD का मूल नाम

query { 
    connections { 
     drafts(first: 10) { 
      edges { 
       node { 
        ... on Draft { 
         id 
        } 
       } 
      } 
     } 
    } 
} 

इस पेज में, मैं भी CreateDraftMutation के माध्यम से ड्राफ्ट बना सकते हैं।

mutation { 
    createDraft(input: { 
     clientMutationId: "1" 
     content: "content" 
    }) { 
     draft { 
      id 
      content 
     } 
    } 
} 

इस उत्परिवर्तन के बाद, मैं रिले को अपने स्टोर में बनाए गए ड्राफ्ट को जोड़ना चाहता हूं।

https://facebook.github.io/relay/docs/guides-mutations.html

RANGE_ADD प्रतिक्रिया पेलोड में एक माता पिता, एक कनेक्शन है, और नव निर्मित बढ़त के नाम को देखते हुए रिले जोड़ देगा: उत्परिवर्तन config के लिए सबसे अच्छा उम्मीदवार RANGE_ADD है, जो निम्नलिखित के रूप में दर्ज है है स्टोर के लिए नोड और निर्दिष्ट सीमा व्यवहार के अनुसार कनेक्शन में संलग्न करें।

तर्क

parentName: स्ट्रिंग जवाब में फ़ील्ड नाम जिसे कनेक्शन के माता-पिता का प्रतिनिधित्व करता है

parentID: स्ट्रिंग माता पिता नोड कनेक्शन

connectionName जिसमें की DataID: स्ट्रिंग कनेक्शन में फ़ील्ड नाम

एजनाम: स्ट्रिंग जवाब में फ़ील्ड नाम है कि नव निर्मित बढ़त

rangeBehaviors प्रतिनिधित्व करता है: {[कॉल: स्ट्रिंग]: GraphQLMutatorConstants.RANGE_OPERATIONS}

मुद्रित, डॉट-अलग GraphQL वर्णमाला के क्रम में कॉल के बीच एक नक्शा है, और व्यवहार हम उन कॉल के प्रभाव में कनेक्शन के लिए नए किनारे जोड़ते समय रिले प्रदर्शित करना चाहते हैं। व्यवहार 'परिशिष्ट', 'अनदेखा', 'प्रीपेन्ड', 'रीफेट', या 'निकालें' में से एक हो सकता है।

प्रलेखन से उदाहरण निम्नलिखित के रूप में चला जाता है:

class IntroduceShipMutation extends Relay.Mutation { 
    // This mutation declares a dependency on the faction 
    // into which this ship is to be introduced. 
    static fragments = { 
    faction:() => Relay.QL`fragment on Faction { id }`, 
    }; 
    // Introducing a ship will add it to a faction's fleet, so we 
    // specify the faction's ships connection as part of the fat query. 
    getFatQuery() { 
    return Relay.QL` 
     fragment on IntroduceShipPayload { 
     faction { ships }, 
     newShipEdge, 
     } 
    `; 
    } 
    getConfigs() { 
    return [{ 
     type: 'RANGE_ADD', 
     parentName: 'faction', 
     parentID: this.props.faction.id, 
     connectionName: 'ships', 
     edgeName: 'newShipEdge', 
     rangeBehaviors: { 
     // When the ships connection is not under the influence 
     // of any call, append the ship to the end of the connection 
     '': 'append', 
     // Prepend the ship, wherever the connection is sorted by age 
     'orderby(newest)': 'prepend', 
     }, 
    }]; 
    } 
    /* ... */ 
} 

तो माता-पिता गुट के रूप में के रूप में स्पष्ट है, यह केक का एक टुकड़ा है, लेकिन मैं कठिन समय parentName और की पहचान करने किया गया है parentID अगर यह सीधे क्वेरी कनेक्शन से आया था।

मैं यह कैसे कर सकता हूं?

संपादित करें:

इस प्रकार क्वेरी को निर्यात किया गया था।

export default new GraphQLObjectType({ 
    name: 'Query', 
    fields:() => ({ 
    node: nodeField, 
    viewer: { 
     type: viewerType, 
     resolve:() => ({}), 
    }, 
    connections: { 
     type: new GraphQLObjectType({ 
     name: 'Connections', 

जो बदले में रिले कंटेनर

export default Relay.createContainer(MakeRequestPage, { 
    fragments: { 
     connections:() => Relay.QL` 
      fragment on Connections { 
+0

क्या आपकी क्वेरी में 'कनेक्शन' ग्राफिकल ऑब्जेक्ट या कनेक्शन है? –

+0

@ अहमदफर्डसबिनअलम मैंने नीचे स्निपेट जोड़ा है। 'कनेक्शन' GraphQLObjectType फ़ील्ड के साथ आता है जो कनेक्शन फ़ील्ड हैं। उदाहरण के लिए – lustdante

उत्तर

1

मैं कठिन समय parentName और parentID की पहचान करने किया गया है अगर यह क्वेरी कनेक्शन से सीधे आया में प्रयोग किया जाता है।

faction और रिले प्रलेखन से उदाहरण में ships बिल्कुल connections और अपने मामले में drafts जैसे ही हैं। प्रत्येक GraphQLObject में एक आईडी है, इसलिए आपकी connections ऑब्जेक्ट है। इसलिए, आपके उत्परिवर्तन के लिए, parentNameconnctions और parentIDconnections की आईडी है।

query { 
    connections { 
     id 
     drafts(first: 10) { 
      edges { 
       node { 
        ... on Draft { 
         id 
        } 
       } 
      } 
     } 
    } 
} 

वैसे, मैं अपने आवेदन डोमेन से connections और drafts हैं शर्तों लगता है। अन्यथा, connections ग्राफ़क्लुलेशन कनेक्शन प्रकार से भ्रमित है।

+0

'ड्राफ्ट्स 'निश्चित रूप से आवेदन डोमेन शब्द है। मुझे अभी 'कनेक्शन' का एहसास हुआ, जिसे मैंने आमतौर पर 'नोड' या 'दर्शक' जैसे रूट रूट क्वेरी के रूप में माना, हमारे आवेदन के लिए भी अद्वितीय है। (मेरे साथियों ने इसके साथ आया)। तो मुझे लगता है कि कनेक्शन आईडी एक वैश्विक आईडी की तरह होना चाहिए। – lustdante

+0

हां, आईडी एक वैश्विक आईडी है। –

+0

यदि आप सीधे पूछताछ के तहत ड्राफ्ट करेंगे तो parentName और parentId क्या होगा? – velop

संबंधित मुद्दे