Estoy explorando las posibilidades de React Native mientras desarrollo una aplicación de demostración con navegación personalizada entre vistas con la ayuda del Navigator
componente .
La clase principal de la aplicación representa el navegador y el renderScene
componente interno devuelve:
class App extends React.Component {
render() {
return (
<Navigator
initialRoute={{name: 'WelcomeView', component: WelcomeView}}
configureScene={() => {
return Navigator.SceneConfigs.FloatFromRight;
}}
renderScene={(route, navigator) => {
// count the number of func calls
console.log(route, navigator);
if (route.component) {
return React.createElement(route.component, { navigator });
}
}}
/>
);
}
}
Por ahora la aplicación contiene dos vistas:
class FeedView extends React.Component {
render() {
return (
<View style={styles.container}>
<Text>
Feed View!
</Text>
</View>
);
}
}
class WelcomeView extends React.Component {
onPressFeed() {
this.props.navigator.push({
name: 'FeedView',
component: FeedView
});
}
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome View!
</Text>
<Text onPress={this.onPressFeed.bind(this)}>
Go to feed!
</Text>
</View>
);
}
}
Lo que quiero descubrir es:
Veo en los registros que al presionar "ir a alimentar"
renderScene
se llama varias veces, aunque la vista se muestra correctamente una vez. ¿Es así como funciona la animación?index.ios.js:57 Object {name: 'WelcomeView', component: function} index.ios.js:57 Object {name: 'FeedView', component: function} // renders Feed View
En general, ¿mi enfoque se ajusta a la forma Reaccionar, o se puede hacer mejor?
Lo que quiero lograr es algo similar NavigatorIOS
pero sin la barra de navegación (sin embargo, algunas vistas tendrán su propia barra de navegación personalizada).
fuente
Respuestas:
Su enfoque debería funcionar muy bien. En las aplicaciones grandes en Fb, evitamos llamar al
require()
componente de escena hasta que lo procesamos, lo que puede ahorrar un poco de tiempo de inicio.Se
renderScene
debe llamar a la función cuando la escena se empuja por primera vez al navegador. También se llamará para la escena activa cuando se vuelva a representar el navegador. Si ves querenderScene
te llaman varias veces después de unpush
, probablemente sea un error.El navegador sigue siendo un trabajo en progreso, pero si encuentra algún problema con él, ¡archívelo en github y márqueme! (@ericvicenti)
fuente
Navigator
ahora está en desuso yRN 0.44.0
puede usarloreact-native-deprecated-custom-components
para admitir su aplicación existente que está usandoNavigator
.fuente
Como otros han mencionado anteriormente, Navigator ha quedado en desuso desde la v0.44, pero aún puede importarse para admitir aplicaciones más antiguas:
Según los documentos (React Native v0.54) Navegando entre pantallas . Ahora se recomienda usar React Navigation si recién está comenzando, o NavigatorIOS para aplicaciones que no sean Android
NB : en el momento de proporcionar esta respuesta, React Native estaba en la versión 0.54
fuente
El componente del navegador está en desuso ahora. Puede usar react-native-router-flux de askonov, tiene una gran variedad y admite muchas animaciones diferentes y es eficiente
fuente