【问题标题】:undefined is not a function (evaluating '(0,_reactnavigationstack.creactDrawernavigation)')undefined 不是一个函数(评估 '(0,_reactnavigationstack.creactDrawernavigation)')
【发布时间】:2019-10-30 18:08:59
【问题描述】:

我想创建包含菜单和主屏幕的抽屉式导航。我尝试了很多,但我无法解决这个问题,并且根据本机反应的更新,我们必须将导航包装在 CreateAppContainer 中,正如你所看到的,我包装了它,但没有任何问题得到解决。

"MainComponent"

import React, {Component} from 'react';
import { View, Platform } from 'react-native';
import Menu from './MenuComponent';
import Home from './HomeComponent';
import DishDetail from './DishDetailComponent';
import {  createAppContainer } from 'react-navigation';
import { createStackNavigator, createDrawerNavigator } from 'react-navigation-stack';   

const MenuNavigator = createStackNavigator({
    Menu: { screen: Menu },
    DishDetail: { screen: DishDetail }
}, 
{
    initialRouteName: 'Menu',
    navigationOptions: {
        headerStyle: {
            backgroundColor: "#512DA8"
        }, 
        headerTintColor: '#fff',
        headerTitleStyle: {
            color: "#fff"
        }
    }
}
);

const HomeNavigator = createStackNavigator({
  Home: { screen: Home }
}, {
  navigationOptions: ({ navigation }) => ({
    headerStyle: {
        backgroundColor: "#512DA8"
    },
    headerTitleStyle: {
        color: "#fff"            
    },
    headerTintColor: "#fff"  
  })
});

//-----------Main---------//

const MainNavigator = createDrawerNavigator({
  Home: 
    { screen: HomeNavigator,
      navigationOptions: {
        title: 'Home',
        drawerLabel: 'Home'
      }
    },
  Menu: 
    { screen: MenuNavigator,
      navigationOptions: {
        title: 'Menu',
        drawerLabel: 'Menu'
      }, 
    }
}, {
drawerBackgroundColor: '#D1C4E9'
});


class Main extends Component() {

    render() { 
        return(
        <View>
            <MainNavigator />
        </View>
        );
    }
}
export default createAppContainer(Main);


////////////////////App.js/////////////////

import React from 'react';
import Main from './components/MainComponent';


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

我认为问题在于我没有正确包装 appContainer。

【问题讨论】:

    标签: react-native react-native-navigation


    【解决方案1】:

    您输入错误。像这样使用

    import { createDrawerNavigator } from 'react-navigation-drawer';
    import { createStackNavigator } from 'react-navigation-stack';
    

    而不是

    import { createStackNavigator, createDrawerNavigator } from 'react-navigation-stack';   
    

    【讨论】:

    • 感谢您提及这一点。我更新了,但在“找不到变量:组件”之后又出现了另一个错误。你对这个问题有任何了解吗? ?
    • 你必须导入 React
    • 您忘记在某些屏幕中导入组件请检查您的错误会有文件提及
    【解决方案2】:

    试试这个方法

    const LoginNavigator = createStackNavigator({
        Login: {
            screen: Login,
            navigationOptions: {
              header: null,
            }
        },
        SignUp: {
            screen: SignUp,
            navigationOptions: {
              header: null,
            }
        }
    });
    
    class NavigationDrawerStructure extends Component {
    
      toggleDrawer = () => {
        //Props to open/close the drawer
        this.props.navigationProps.toggleDrawer();
      };
      render() {
        return (
          <View style={{ flexDirection: 'row' }}>
            <TouchableOpacity onPress={this.toggleDrawer.bind(this)}>
              <Image
                source={require('../Img/hamburger.png')}
                style={{ width: 25, height: 25, marginLeft: 20, tintColor: '#ffffff' }}
             />
            </TouchableOpacity>
          </View>
        );
      }
    }
    
    const HomeActivity_StackNavigator = createStackNavigator({
    
      Home: {
        screen: Main,
        navigationOptions: ({ navigation }) => ({
          title: 'Dashboard',
          headerLeft: <NavigationDrawerStructure navigationProps={navigation} />,
          headerStyle: {
            backgroundColor: '#FF9800'
          },
          headerTintColor: '#fff'
        }),
      },
    }, {headerLayoutPreset: 'center'});
    
    const DrawerNavigators = createDrawerNavigator({
      //Drawer Optons and indexing
      Main: {
        screen: HomeActivity_StackNavigator,
        navigationOptions: {
          drawerLabel: 'Dashboard',
        }
      }
    });
    
    const NonDrawerNavigators = createStackNavigator({
        TaskView: {
            screen: TaskView,
            navigationOptions: {
                title: 'Task',
                headerStyle: {
                    backgroundColor: '#FF9800',
                },
                headerTintColor: '#fff'
            }
        },
        TeamView: {
            screen: TeamView,
            navigationOptions: {
                title: 'Team',
                headerStyle: {
                    backgroundColor: '#FF9800',
                },
                headerTintColor: '#fff'
            }
        }
    }, {headerLayoutPreset: 'center'});
    
    const AppNavigator = createStackNavigator({
        drawerStack: {
            screen: DrawerNavigators,
            navigationOptions: {
                header: null
            }
        },
        nonDrawerStack: {
            screen: NonDrawerNavigators,
            navigationOptions: {
                header: null
            }
        }
    });
    
    export default createAppContainer(createSwitchNavigator({
        SplashScreen: SplashScreen,
        loginStack: LoginNavigator,
        homeStack: AppNavigator
        }, {
           initialRouteName: 'SplashScreen'
       })
    );
    

    【讨论】:

      【解决方案3】:
      I had modified your code as under. I hope this will help you.
      
      "MainComponent"
      
      import React, {Component} from 'react';
      import { View, Platform } from 'react-native';
      import Menu from './MenuComponent';
      import Home from './HomeComponent';
      import DishDetail from './DishDetailComponent';
      import {  createAppContainer } from 'react-navigation';
      import { createStackNavigator, createDrawerNavigator } from 'react-navigation-stack';   
      
      const MenuNavigator = createAppContainer(createDrawerNavigator(
      {
          Menu: { screen: Menu },
          DishDetail: { screen: DishDetail }
      }, 
      {
          contentComponent: SideMenu,
              drawerWidth: normalize(280),
              initialRouteName: "Menu"
      
      }
      ));
      
      const HomeNavigator = createAppContainer(createStackNavigator(
      {
        Home: { screen: Home }
      },
      {
              // Default config for all screens
      
              headerMode: 'none',
              initialRouteName: 'Home',
      
              // transitionConfig: noTransitionConfig,
          },
      ));
      
      class Main extends Component() {
      
          render() { 
              return(
              <View>
                  <MainNavigator />
              </View>
              );
          }
      }
      export default createAppContainer(Main);
      
      
      ////////////////////App.js/////////////////
      
      import React from 'react';
      import Main from './components/MainComponent';
      
      
      export default class App extends React.Component {
        render() {
          return (
            <Main />
          );
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2019-05-10
        • 1970-01-01
        • 2018-10-30
        • 2019-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-09
        相关资源
        最近更新 更多