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

Posted

技术标签:

【中文标题】React Native Navigation v2 sideMenu 无法导航到屏幕【英文标题】:React Native Navigation v2 sideMenu not able to navigate to screen 【发布时间】:2019-01-29 13:55:50 【问题描述】:

我正在尝试从 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',
  
)

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

【问题讨论】:

【参考方案1】:

您在菜单中构建组件的方式有问题。问题是您必须有一个堆栈才能推送其他屏幕,并且从外观上看 - 您的侧菜单屏幕并非如此。

这是设置left sideMenu 组件的方式,它是stack;一旦你这样做了,你就可以像使用 Navigation.push(this.props.componentId... 一样推送屏幕:

left: 
  stack: 
    children: [
      
        component: 
          name: 'app.SideMenu',
        
      
    ]
  

【讨论】:

【参考方案2】:

我做错了实际上是因为我传递了sidemenu componentId,而实际上我需要传递当前选项卡的id。像这样。

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

sidemenu布局也是这样

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

【讨论】:

【参考方案3】:

虽然在 sidemenu 对象中有 childrenstack 可能是一种解决方案。但你也可以这样做。考虑关注

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",
                                        ,
                                    ,
                                ,
                            ,
                        ],
                    ,
                ,
            ,
        ,
    );

这样,当您要推送时,只需调用位于 centerstack: 下的主堆栈的 ID,ID 为 AppHomeStack

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

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

【讨论】:

以上是关于React Native Navigation v2 sideMenu 无法导航到屏幕的主要内容,如果未能解决你的问题,请参考以下文章

使用 wix@react-native-navigation 运行 react-native 应用程序时出错

React Navigation 与 React Native Navigation [关闭]

在带有 wix/react-native-navigation 的模态中使用 react-native-gesture-handler (RNGH)

使用像 React Navigation 这样的基于 JS 的导航解决方案而不是使用像 Wix 的 React Native Navigation 这样的 Native Navigation 的缺点?

wix react native navigation registerComponent React未定义

react-native-navigation 底部标签样式