反应本机抽屉开关不起作用

时间:2018-09-03 02:44:58

标签: react-native react-navigation react-native-ios

抽屉导航器位于stackNavigator中。

我将标题设置为无,并且我想在按下按钮时使标题部分起作用。

我写了以下代码。

  

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

没有错误发生。 但是它什么也没做。

导航器代码如下:

navigator.js

const MainScene = createStackNavigator({
 MainTab: {screen: MainTab},
 OtherScene: {screen: OtherScene}
},{...})

const OtherScene: createStackNavigator({
 DrawerScene: {screen: DrawerScene}
},{...})

const DrawerScene = createDrawerNavigator({
 Page1: {screen: Page1},
 Page2: {screen: Page2},
},{...})

Header.js

_sideMenu() {
 this.props.navigation.dispatch(DrawerActions.toggleDrawer());
}

render() {
  return (
   ...
   <TouchableOpacity 
    onPress={() => this._sideMenu()}>
    <Image ... />
   </TouchableOpacity>
   ...
  )
 }

page1和page2都包含直接编写的标题。

Page1.js

render() {
 return(
  <View>
   <Header navigation={this.props.navigation} />
   ...
  </View>
 )
}

2 个答案:

答案 0 :(得分:3)

一个解决方案是将stackNavigator放置在抽屉导航中,如下所示:

const MainScene = createStackNavigator({
 MainTab: {screen: MainTab},
 OtherScene: {screen: OtherScene}
},{...})

const OtherScene: createStackNavigator({
 SomeOtherScene: {screen: SomeOtherScene} // remove the drawer from here
},{...})

const DrawerScene = createDrawerNavigator({
 Page1: {screen: Page1},
 Page2: {screen: Page2},
 MainScene: {
     screen: MainScene, 
     navigationOptions: {
         drawerLabel: () => null
    }},
 OtherScene: {
     screen: OtherScene, 
     navigationOptions: {
         drawerLabel: () => null
    }},
},{initialRoute: "MainScene"})

这样,您就不会遇到未定义open / close / toggleDrawer函数的问题,甚至可以像这样使用它们:this.props.navigation.toggleDrawer();

如果您不希望“ MainScene”和“ OtherScene”出现在抽屉项目中,则只需为其抽屉标签返回null

答案 1 :(得分:1)

尝试一下 从“反应导航”导入{DrawerActions};

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

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