2016-05-12 10 views
6

मैं लॉगिन के लिए एक उत्परिवर्तन लागू करने की कोशिश कर रहा हूं। उत्परिवर्तन प्रदान किए गए id_token को मान्य करता है और सत्र के माध्यम से उपयोगकर्ता को लॉग करता है। उत्परिवर्तन स्वयं काम करता है (GraphiQL के साथ सत्यापित), लेकिन मुझे रिले के साथ इसे एकीकृत करने में समस्याएं हैं।रिले/राउटर लॉगिन उत्परिवर्तन?

जब कोई उपयोगकर्ता लॉग इन करता है, तो संपूर्ण व्यू स्टोर संभवतया बदलता है क्योंकि "दर्शक" मूल क्वेरी है। लेकिन मैं वसा पूछताछ में अपने पूरे प्रश्न पेड़ को सूचीबद्ध नहीं करना चाहता हूं। किसी भी तरह से पूरे स्टोर को साफ़ करने में सक्षम होना अच्छा होगा, लेकिन मुझे react-router-relay के साथ ऐसा करने का कोई तरीका नहीं दिख रहा है।

रिले उत्परिवर्तन:

export default class LoginMutation extends Relay.Mutation { 
    getMutation() { 
    return Relay.QL`mutation {login}`; 
    } 

    getVariables() { 
    return { 
     id_token: this.props.id_token 
    }; 
    } 

    getFatQuery() { 
    // TODO: list everything? 
    return Relay.QL` 
     fragment on LoginPayload { 
     viewer 
     } 
    `; 
    } 

    getConfigs() { 
    return []; // TODO: not sure what to return... 
    } 
} 

उपयोग:

Relay.Store.commitUpdate(new LoginMutation({id_token}), { 
     onSuccess: (resp) => { 
      history.push('/'); 
     } 
     }); 

GraphQL स्कीमा:

input LoginInput { 
    id_token: String! 
    clientMutationId: String! 
} 

type LoginPayload { 
    viewer: Viewer 
    clientMutationId: String! 
} 

type Mutation { 
    login(input: LoginInput!): LoginPayload 
} 

interface Node { 
    id: ID! 
} 

type Query { 
    viewer: Viewer 
    node(id: ID!): Node 
} 

type Viewer implements Node { 
    id: ID! 
    user: User 
    ships: [Ship] 
    ship(id: ID!): Ship 
} 

schema { 
    query: Query 
    mutation: Mutation 
} 
+0

रिलीज [v0.8.0] (रिले के https://github.com/facebook/relay/releases/tag/v0.8.0) 'रिले.इन्वायरमेंट' पेश करता है, जिसे आप तत्काल कर सकते हैं और 'रिले' .Renderer'। यह अभी तक दस्तावेज नहीं है। इस पर एक github मुद्दे की आखिरी कुछ टिप्पणियां देखें: [RelayStore.reset लागू करें) (https://github.com/facebook/relay/issues/233)। –

उत्तर

0

fatQuery में, जब आप एक non-scalar फ़ील्ड, रिले समझेंगे कि किसी भी कनेक्टेड फ़ील्ड में आपके पास हो सकता है pdated। कुछ फ़ील्ड में जिनके लिए तर्क की आवश्यकता होती है (उदाहरण के लिए, (first: n)), आप इस आवश्यकता को बाईपास करने के लिए @relay(pattern: true) का उपयोग कर सकते हैं। This SO question सुविधा पर चर्चा करता है।

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