2015-09-15 4 views
6

मैं relayreact-native के साथ काम मिल गया है के साथ रिले का उपयोग कर, लेकिन जब एक Navigator के साथ काम कर रहा है कि कैसे सबसे अच्छा रिले मार्गों और जड़ कंटेनरों का उपयोग करने के बारे में उलझन में हूँ, विशेष रूप से जो कई मार्गों को प्रस्तुत करता है। मेरे माता-पिता मार्ग मेंसशर्त टुकड़े या एम्बेडेड रूट कंटेनर जब प्रतिक्रिया-मूलनिवासी

var Nav = React.createClass({ 

renderScene(route, nav) { 
    switch(route.id) { 
    case 'first': 
     return <First navigator={nav} /> 
    case 'second': 
     return <Second navigator={nav} /> 
    } 
}, 

render() { 
    <Navigator 
    initialRoute={{ id: 'first' }} 
    renderScene={this.renderScene} 
    /> 
} 

}) 


module.exports = Relay.createContainer(Nav, { 
    fragments: { 
    viewer:() => Relay.QL` 
     fragment on User { 
     ${First.getFragment('viewer'}, 
     ${Second.getFragment('viewer'} 
     } 
    ` 
    } 
}) 

, मैं तो का अनुरोध User टुकड़ा जो क्वेरी बनाता है:

निम्नलिखित वर्ग है।

समस्या यह है कि टुकड़ा first और second घटकों दोनों द्वारा परिभाषित उन क्षेत्रों सहित होगा, भले ही उनमें से केवल एक ही समय में प्रदर्शित किया जा रहा हो।

इस मामले मैं चाहिए:

1) renderScene कॉलबैक में एक और Relay.RootContainer वापसी? क्या यह आमतौर पर Relay.RootContainers को एक-दूसरे के भीतर एम्बेड करना एक बुरा विचार है?

renderScene(route, nav) { 
    switch(route.id) { 
    case 'first': 
     return (
     <Relay.RootContainer 
      Component={First} 
      route={new FirstRoute()} 
      renderFetched={(data) => { 
      return <First navigator={nav} {...data} /> 
      }} 
     /> 
    ) 
    } 
} 

2) एक टुकड़ा शामिल करने के लिए सशर्त चर का उपयोग करें?

initialVariables: { 
    first: true 
}, 

fragments: { 
    viewer: (variables) => Relay.QL` 
    fragment on User { 
     ${First.getFragment('viewer').if(variables.first) 
    } 
    ` 
} 

या क्या अन्य सुझाव हैं?

उत्तर

5

कुछ इस तरह का उपयोग करना:

function matchRoute(route, map) { 
    return map[route.name] ? map[route.name]() : null; 
} 

इस प्रयास करें:

fragments: { 
    viewer: (variables) => Relay.QL` 
    fragment on User { 
     ${route => matchRoute(route, { 
     FirstRoute:() => First.getFragment('viewer'), 
     SecondRoute:() => Second.getFragment('viewer'), 
     }}, 
    } 
    `, 
} 

[1]: medium.com/@cpojer/relay-and-routing

+0

चर 'कहाँ से आ रही route' है? –

+2

https://github.com/facebook/relay/blob/1cfd48d1df9ea726d6775931fea05bf2420c4cff/src/query/RelayQL.js#L54-L57 – steveluscher

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