Ho relay
lavorare con react-native
, ma sono confuso su come utilizzare al meglio le rotte di relè e contenitori di root, soprattutto quando si lavora con un Navigator
che rende più percorsi.frammenti condizionali o radice contenitori incorporati quando si utilizza Relè con React-Native
Prendere la seguente classe:
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'}
}
`
}
})
Nel mio percorso genitore, quindi richiedere l'User
frammento che costruisce la query.
Il problema è che il frammento includerà quei campi definiti da entrambi i componenti first
e second
, anche se solo uno di essi viene visualizzato alla volta.
In questo caso dovrei:
1) tornare un'altra Relay.RootContainer
nel renderScene
richiamata? È generalmente una cattiva idea incorporare Relay.RootContainers
l'uno nell'altro?
renderScene(route, nav) {
switch(route.id) {
case 'first':
return (
<Relay.RootContainer
Component={First}
route={new FirstRoute()}
renderFetched={(data) => {
return <First navigator={nav} {...data} />
}}
/>
)
}
}
2) Utilizzare le variabili condizionali per includere un frammento?
initialVariables: {
first: true
},
fragments: {
viewer: (variables) => Relay.QL`
fragment on User {
${First.getFragment('viewer').if(variables.first)
}
`
}
Oppure ci sono altri suggerimenti?
casi in cui è la variabile 'route' provenienti da? –
https://github.com/facebook/relay/blob/1cfd48d1df9ea726d6775931fea05bf2420c4cff/src/query/RelayQL.js#L54-L57 – steveluscher