【问题标题】:How to open drawer navigator not in a screen defined in drawernavigator如何在抽屉导航器中定义的屏幕中打开抽屉导航器
【发布时间】:2019-12-12 11:31:16
【问题描述】:

是否可以从我不希望它出现在我的抽屉导航器中的屏幕上打开抽屉导航器

const AppDrawerNavigator = createDrawerNavigator({
  Home:{
    screen:MainStackNavigator,//stack with tab
  },
  Pdf:{
    screen:AnotherScreen
  }
},
{
  drawerPosition: 'left',
  drawerWidth:Dimensions.get('window').width-50,

})

这是我的堆栈导航器

const AppStackNavigator = createStackNavigator({
  Main:{screen:AppDrawerNavigator,navigationOptions: {
    header: null,
  }},
  Login:{screen:LoginScreen},

  Map:{screen:MapScreen,navigationOptions:({navigation})=>({
    headerLeft:null,
    headerTransparent:true,
    headerRight:
        <TouchableOpacity
         onPress={()=>navigation.toggleDrawer()}>
           <IconMenu name='menu' size={25} style={{marginRight:20}} />
         </TouchableOpacity>})},
})

我希望 MapScreen 打开我上面定义的抽屉(它不工作,它说导航未定义。toggleDrawer() 不是一个函数,当我点击我的 IconMenu 时)

谢谢你

【问题讨论】:

    标签: android react-native react-navigation


    【解决方案1】:

    使用它来打开或关闭抽屉

    this.props.navigation.dispatch(DrawerActions.toggleDrawer());
    

    在您的代码中,您可以使用 as

    navigation.dispatch(DrawerActions.toggleDrawer());
    

    【讨论】:

    • 谢谢,但它说:undefined is not an object(evalating '_this.props.navigation'
    • 在您的代码中用作 navigation.dispatch(DrawerActions.toggleDrawer());
    • 我还添加了import { DrawerActions } from 'react-navigation-drawer';,但现在当我点击我的图标时,什么也没有发生
    • 你在用navigation.dispatch(DrawerActions.toggleDrawer());这个吗?
    • yes : ` navigation.dispatch(DrawerActions.toggleDrawer())}> })} `
    【解决方案2】:

    您需要发送带有动作的 NavigateAction 来切换抽屉。

    试试这个:

      headerRight: () => {
        const navigateAction = NavigationActions.navigate({
          routeName: "Main",
          action: DrawerActions.toggleDrawer()
        });
    
        return (
            <TouchableOpacity
             onPress={()=> navigation.dispatch(navigateAction)}>
           <IconMenu name='menu' size={25} style={{marginRight:20}} />
         </TouchableOpacity>})},
        );
      }
    

    你应该像这样导入 NavigateActions 和 DrawerActions:

    import { createAppContainer, NavigationActions } from "react-navigation";
    import { createDrawerNavigator, DrawerActions } from "react-navigation-drawer";
    

    action 在 routeName 中执行,在你的情况下是 DrawerNavigation

    Here is the link to docs

    And here is a snack example

    【讨论】:

    • 非常感谢它几乎可以工作!问题是我希望它在我的 MAP 屏幕中,当我点击图标时,它会按预期打开抽屉,但带我回到我的主屏幕。我试图将routeName 更改为“地图”,但再次没有任何反应。
    • 我注意到了同样的行为。我还不知道为什么会这样
    猜你喜欢
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    相关资源
    最近更新 更多