使用 React-NativeNavigator 组件进行自定义导航

我正在探索 本土反应的可能性,同时开发一个演示应用程序与自定义导航之间的意见与 Navigator组件的帮助。

主应用程序类呈现导航器,renderScene内部返回传递的组件:

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 });
}
}}
/>
);
}
}

目前,应用程序包含两个视图:

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>
);
}
}

我想弄明白的是:

  • 我在日志中看到,当按下“ go to feed”时,renderScene被调用了好几次,尽管视图只呈现了一次。这就是动画的工作原理吗?

    index.ios.js:57 Object {name: 'WelcomeView', component: function}
    index.ios.js:57 Object {name: 'FeedView', component: function}
    // renders Feed View
    
  • Generally does my approach conform to the React way, or can it be done better?

What I want to achieve is something similar to NavigatorIOS but without the navigation bar (however some views will have their own custom navigation bar).

26953 次浏览

你的方法应该很有效。在 Fb 的大型应用程序中,我们避免为场景组件调用 require(),直到我们呈现它,这可以节省一点启动时间。

当场景第一次推送到导航器时,应该调用 renderScene函数。当导航器被重新渲染时,它也将被调用为活动场景。如果您看到 renderScenepush之后被多次调用,那么它可能是一个错误。

该导航器仍然是一个进展中的工作,但如果你发现任何问题,它请文件在 github 和标记我!(@ericvicenti)

Navigator现在在 RN 0.44.0中不被推荐使用,你可以使用 react-native-deprecated-custom-components来支持你现有的使用 Navigator的应用程序。

现在不推荐使用导航器组件。您可以使用的反应-本地-路由器-通量的 askonov,它有一个巨大的多样性,并支持许多不同的动画,是有效的

正如前面提到的,Navigator 自0.44版本以来已被弃用,但仍然可以导入以支持较旧的应用程序:

中的反应本机软件包中删除了导航器 版本0.44。模块已移动到 可以由您的 应用程序以保持向后兼容性。

要查看 Navigator 的原始文档,请切换到 那些文件。

根据文档(React Nativev0.54) 在屏幕之间导航。如果您刚开始使用 反应式导航,或者对于非 Android 应用程序使用 导航系统,现在建议您使用 反应式导航

如果您刚刚开始学习导航,那么您可能会 要使用 反应式导航。反应导航提供了一个易于使用 导航解决方案,能够显示常见的堆栈导航和 IOS 和 Android 上的标签式导航模式。

...

如果您只针对 iOS,那么您可能还需要查看 < strong > NavigatorIOS 作为以最小配置提供本机外观的一种方式,因为它 提供本机 UINavigationController 类的包装器。

NB : 在提供这个答案的时候,React Nativewas At version 0.54