React Native Navigation v2 sideMenu无法导航到屏幕

时间:2018-08-23 08:36:48

标签: react-native react-native-navigation

我正在尝试从sideMenu调用Navigate.push,但是什么也没发生。

Navigation.setRoot({
    root: {
      sideMenu: {
        left: {
          component: {
            name: 'app.SideMenu',
          },
          children: [
           {
             stack: {
             children: [
                {
                  component: {
                    name: TERMS_SCREEN.id,
                  }
                },
             ]
           }
        }
      ]
        },
        center: {
          bottomTabs: {
            id: 'BottomTabsId',
            options: {
              topbar: {
                visible: true,
              }
            },
            children: [
              {
                stack: {
                  id: 'Tabs',
                  children: [
                    {

..并且我试图像这样在sideMenu中推送屏幕

console.log(this.props.componentId);
Navigation.push(this.props.componentId, {
  component: {
    name: 'app.Terms',
  }
})

我正在获取日志,但没有任何反应。我很肯定我需要对布局做一些事情,但是在文档中没有看到示例或解释。

3 个答案:

答案 0 :(得分:2)

在菜单中构造组件的方式存在问题。问题是您必须具有一个堆栈,才能按其外观推入其他屏幕-侧面菜单屏幕不是这种情况。

这就是设置left的{​​{1}} sideMenu组件的方式;完成此操作后,您将可以完全像使用stack一样推动屏幕:

Navigation.push(this.props.componentId...

答案 1 :(得分:2)

我做错的事实际上是因为我实际上需要传递当前选项卡的ID时传递了sidemenu componentId。像这样的东西。

    Navigation.push(`Tab${this.props.activeTabIndex + 1}`,{
        component: {
            name: Screens.ACCOUNTS,
        }
      }
    )

这也是侧面菜单布局

root: {
  sideMenu: {
    id: 'SideMenu',
    left: {
      component: {
        id: 'SideMenu.left',
        name: Screens.SIDEMENU,
      }
    },

答案 2 :(得分:0)

同时在children对象中拥有stacksidemenu可能是一种解决方案。但您也可以这样做。考虑关注

Navigation.setRoot({
        root: {
            sideMenu: {
                left: {
                    id: "AppSideMenu",
                    component: {
                        id: "HomeScreenDrawer",
                        name: "YO.HomeScreen.Drawer",
                    },
                },
                center: {
                    stack: {
                        id: "AppHomeStack",
                        children: [
                            {
                                component: {
                                    id: "AppHomeScreen",
                                    name: "YO.HomeScreen",
                                    options: {
                                        topBar: {
                                            visible: false,
                                            drawBehind: true,
                                            height: 0,
                                        },
                                        statusBar: {
                                            style: "light",
                                        },
                                    },
                                },
                            },
                        ],
                    },
                },
            },
        },
    });

这样,当您要推送时,只需调用位于center{stack:{}}下且ID为AppHomeStack的主堆栈ID即可

现在在应用程序中的任何地方,这都可以解决问题

Navigation.push("AppHomeStack", {
    component: {
    name: "YO.UserScreen",
    },
});