【问题标题】:DrawerNavigator - Can't open DrawerNavigator inside StackNavigator routeDrawerNavigator - 无法在 StackNavigator 路由中打开 DrawerNavigator
【发布时间】:2018-07-28 21:48:24
【问题描述】:

最近我在 StackNavigator 中的一个简单的 DrawerNavigator 上遇到了问题。 我的目标是当我点击 StackNavigator 标题上的 BurgerMenu 图标时,同时获得 StackNavigator 的返回功能DrawerNavigator 侧边菜单

这是我当前的代码

import React, { Component } from 'react';
import { TouchableHighlight } from 'react-native';
import SvgUri from 'react-native-svg-uri';
import { StackNavigator } from 'react-navigation'; 
import { DrawerNavigator } from "react-navigation";
import SideBar from './SideBar';
import Screen1 from './Screen1';
import Screen2 from './Screen2';
import Screen3 from './Screen3';

export default class App extends React.Component {
  render() {
    return <StackNav />;
  }
}

class BurgerMenu extends React.Component {
  render() {
    return (
                  <TouchableHighlight 
                    onPress={() => this.props.navigation.navigate("DrawerOpen")}>
                    <SvgUri
                      width="30"
                      height="30"
                      source={require("Project_01/app/images/menu.svg")}
                    />
                  </TouchableHighlight>
    );
  }
}

const DrawerNav = DrawerNavigator(
  {
    Screen1: { screen: Screen1 }
  },
  {
    contentComponent: props => <SideBar {...props} />
  }
);

const StackNav = StackNavigator(
  {
    Screen1: {
      screen: DrawerNav,
    },
    Screen2: {
      screen: Screen2,
    },
    Screen3: {
      screen: Screen3,
    },
  },
  {
    initialRouteName: 'DrawerNav',
    navigationOptions: {
      headerRight: <BurgerMenu /> ,
      title: "Header"
    },
  },
);

如您所见,我将带有 BurgerMenu 组件的 headerRight 添加到 StackNavigator 中的 navigationOptions。

在 BurgerMenu 类中,我使用“ onPress={() => this.props.navigation.navigate("DrawerOpen")}> ”添加了 TouchableHighlight,我的意思是打开 DrawerNavigator。

不幸的是,当我按下它时,我收到一条错误消息,上面写着“未定义不是对象(正在评估'e.props.navigation.navigate')。

谁能帮帮我

【问题讨论】:

    标签: react-native react-navigation


    【解决方案1】:

    尝试改变这个:

        navigationOptions: {
          headerRight: <BurgerMenu /> ,
          title: "Header"
        },
    

    通过这个:

      navigationOptions: ({navigation}) => ({
        headerRight: <BurgerMenu navigation={navigation} />,
        title: "Header"
      }),
    

    你也可以参考我的github上的这个example

    【讨论】:

    • 嗨@Yanci Nerio !:)。感谢您的示例,但我仍然需要我的代码才能工作。我的计划是在“屏幕 2”上时打开抽屉。我做了你所说的替换那些'navigationOptions'并最终回到屏幕一。我想要的是在打开抽屉的同时留在 Screen2 上。我该如何做到这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多