Estou explorando as possibilidades do React Native ao desenvolver um aplicativo de demonstração com navegação personalizada entre visualizações com a ajuda do Navigator
componente .
A classe principal do aplicativo renderiza o navegador e o renderScene
retorno interno passa o componente:
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 enquanto, o aplicativo contém duas visualizações:
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>
);
}
}
O que eu quero descobrir é:
Vejo nos registros que, ao pressionar "ir para o feed",
renderScene
é chamado várias vezes, embora a exibição seja renderizada corretamente uma vez. É assim que a animação funciona?index.ios.js:57 Object {name: 'WelcomeView', component: function} index.ios.js:57 Object {name: 'FeedView', component: function} // renders Feed View
Geralmente, minha abordagem está em conformidade com a maneira React, ou pode ser melhorada?
O que eu quero alcançar é algo semelhante, NavigatorIOS
mas sem a barra de navegação (no entanto, algumas visualizações terão sua própria barra de navegação personalizada).
fonte
Respostas:
Sua abordagem deve funcionar muito bem. Em grandes aplicativos no Fb, evitamos chamar o
require()
componente for scene até renderizá-lo, o que pode economizar um pouco de tempo de inicialização.A
renderScene
função deve ser chamada quando a cena é empurrada pela primeira vez para o Navegador. Também será chamado para a cena ativa quando o Navegador for renderizado novamente. Se vocêrenderScene
for chamado várias vezes após apush
, provavelmente é um erro.O navegador ainda está em andamento, mas se você encontrar algum problema, arquive no github e me marque! (@ericvicenti)
fonte
Navigator
está obsoleto agora,RN 0.44.0
você pode usarreact-native-deprecated-custom-components
para oferecer suporte ao aplicativo existente que está usandoNavigator
.fonte
Como já mencionado anteriormente, o Navigator foi descontinuado desde a v0.44, mas ainda pode ser importado para suportar aplicativos mais antigos:
Conforme os documentos (React Native v0.54), Navegando entre telas . Agora, é recomendável usar o React Navigation se você está apenas começando, ou o NavigatorIOS para aplicativos não Android
NB : No momento de fornecer esta resposta, o React Native estava na versão 0.54
fonte
O componente Navigator está obsoleto agora. Você poderia usar react-native-router-flux por askonov, ele tem uma variedade enorme e suporta muitas animações diferentes e é eficiente
fonte