Ho un'app React Native che utilizza il framework Redux e sto utilizzando il componente Navigator per gestire la navigazione. Ho avuto un po 'di problemi nel far funzionare la navigazione e non sono in grado di trovare alcun buon esempio di come farlo correttamente, quindi sto cercando aiuto e chiarimenti.Modo corretto per navigare con React Native, Redux e Navigator
Ecco il succo di quello che ho attualmente, che sta lavorando, ma non so se sto facendo bene:
Root componente
...
renderScene(route, navigator) {
console.log('RENDER SCENE', route);
const Component = route.component;
return (
<Component navigator={navigator} route={route} {...this.props} />
)
}
render() {
return (
<Navigator
renderScene={(route, nav) => this.renderScene(route, nav)}
initialRoute={{ name: 'Signin', component: Signin }} />
)
}
Signin Componente
...
componentWillReceiveProps(nextProps) {
if (!this.props.signedIn && nextProps.signedIn) {
console.log('PUSHING TO MAIN');
nextProps.navigator.push({ name: 'Main', component: Main });
}
}
Domande:
1: Il mio primo pensiero è che probabilmente dovrei spostare il codice navigator.push
in un'azione. Tuttavia è componentWillReceiveProps
il posto giusto per chiamare l'azione? Quando viene caricato il componente Signin
, viene eseguita un'azione per accedere all'utente se ha già una sessione attiva. Per impostazione predefinita non sono registrati, quindi quando passano i prossimi oggetti di scena, controllo se è cambiato e quindi spingo a Main
.
2: Nel mio log della console subito dopo 'PUSH TO MAIN' viene registrato Vedo due 'renda scena' tronchi:
[info] 'RENDER SCENE', { name: 'Signin', component: [Function: Signin] } (EXPECTED)
[info] 'PUSHING TO MAIN'
[info] 'RENDER SCENE', { name: 'Signin', component: [Function: Signin] } (WHY?)
[info] 'RENDER SCENE', { name: 'Main', component: [Function: Main] }
Sono curioso di sapere perché renda scena viene chiamato due volte (la prima uno è il componente Signin
) se sto solo spingendo il componente Main
.
Anche in origine nel metodo componentWillReceiveProps
Stavo solo controllando:
if (nextProps.signedIn) {
nextProps.navigator.push({ name: 'Main', component: Main });
}
ma questo ha causato la componente Main
di essere spinto due volte.
Facebook sta passando da Navigator a [NavigationExperimental] (https://github.com/ericvicenti/navigation-rfc), che sarà la libreria di navigazione supportata in futuro. –
Facebook sta ora passando a [react-navigation] (https://reactnavigation.org/) – edmofro