Navigator与ViewPagerAndroid相同

时间:2015-12-12 06:13:33

标签: react-native

Navigator&和Navigator之间的区别是什么? React-Native中的ViewPagerAndroid组件?什么时候使用它们? 似乎两者都可用于在应用程序的不同屏幕之间导航。

2 个答案:

答案 0 :(得分:1)

重要的是要了解React Native不是"一次写入,在任何地方运行"解。因此,它包含特定于平台的模块,仅包装iOS / Android本机可用的组件。

其中一个组件是 ViewPagerAndroid 。这只是包装了Android" ViewPager"组件并提供与本机使用ViewPager类似的功能。当您具有类似轮播的布局时,应使用此组件,其中多个视图水平布局,并且您希望在它们之间设置动画:http://i.stack.imgur.com/kPOic.png

Navigator 是一个跨平台的组件,可让您轻松切换屏幕上当前显示的内容。导航器没有层次结构或顺序的概念(与ViewPagerAndroid不同),您可以随时切换到任何其他视图。

答案 1 :(得分:0)

ViewPagerAndroid 更多是用于标签的滑动组件。如果你更多地使用它,你会发现在某些情况下它可能是限制性的。

导航器可让您在屏幕/页面中进行推送/导航,并在堆栈中跟踪它。这里的导航器在transitions between scenes方面更加通用。它也适用于机器人上的硬件后退按钮。

例如,假设您有“发现”,“搜索”和“个人资料”的底部导航,但在“个人资料”屏幕中,您还可以看到“Feed”,“关注”和“关注者”标签。在此设置中,您将需要两个ViewPagerAndroid组件,这是不可能的。

这也是一个不好的用户体验,因为用户可能想要在关注者和关注者之间滑动,但会突然从配置文件扫描到搜索。

专业提示: 另一方面,Navigator组件可以在另一个中组合。这是我最初不知道并且正在努力的事情。我的应用程序通常包含两个Navigator组件。一个用于处理我在开始时在TabNavigator中加载的主要场景(例如,发现,搜索和配置文件)之间的选项卡。我使用jumpTo和自定义转换少configureScene在它们之间导航。

configureScene(route, routeStack) { //- this all is a hacky way to make no transitions
    var NoTransition = {
        opacity: {
            value: 1.0,
            type: "constant",
        },
    };

    return  {
        ...Navigator.SceneConfigs.FadeAndroid,
        gestures: null,
        defaultTransitionVelocity: 1000,
        animationInterpolators: {
            into: buildStyleInterpolator(NoTransition),
            out: buildStyleInterpolator(NoTransition),
        },
    };
}

这样,用户可以在主场景之间跳转,并且每个场景中的进度/更改都不会丢失(如向下滚动列表),就像ViewPagerAndroid一样。然后我有其他MainNavigator用于导航以推送和弹出单个场景,如Single(从列表中显示某种内容)。 MainNavigator的第一个或第一个场景是TabNavigator。