Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React native-未定义不是一个函数(计算navigation.openDrawer()';)_Javascript_React Native_React Navigation - Fatal编程技术网

Javascript React native-未定义不是一个函数(计算navigation.openDrawer()';)

Javascript React native-未定义不是一个函数(计算navigation.openDrawer()';),javascript,react-native,react-navigation,Javascript,React Native,React Navigation,我是个新来的本地人。我要在这里分享我的代码 App.js Routes.js import React, {Component} from 'react'; import { createStackNavigator, createAppContainer, createDrawerNavigator, DrawerActions } from 'react-navigation'; import Home from './Home'; import Settings from './Setti

我是个新来的本地人。我要在这里分享我的代码 App.js

Routes.js

import React, {Component} from 'react';
import { createStackNavigator, createAppContainer, createDrawerNavigator, DrawerActions } from 'react-navigation';
import Home from './Home';
import Settings from './Settings';
import SideMenu from './SideMenu';
import { Button, Platform, StyleSheet, Text, View, TouchableOpacity } from 'react-native';

const Nav = createStackNavigator({
  Home: {
    screen: Home,
    navigationOptions: ({navigation}) => ({
      title: "Home",
      headerLeft:(<TouchableOpacity onPress={() => navigation.openDrawer()}>
                <Text >Button</Text>
              </TouchableOpacity>
   ),
  })
 },
  Settings: {
screen: Settings,
navigationOptions: ({navigation}) => ({
  title: "Settings",
})     
  },
});
const Routes = createAppContainer(Nav);
export default Routes;
我真的不想这么做,但我现在真的很绝望。我花了两天的时间试图弄清楚如何制作副菜单,我对这个框架感到非常失望。你甚至不会花5分钟在爱奥尼亚创建一个副菜单。 请帮忙。git上可用的项目

错误

undefined is not a function (evaluating navigation.openDrawer()')
被抛出是因为。相反,您需要使用
dispatch
方法和
DrawerActions
帮助程序:

import { DrawerActions } from 'react-navigation'
...
const Nav = createStackNavigator({
  Home: {
    screen: Home,
    navigationOptions: ({navigation}) => ({
      title: "Home",
      headerLeft:(
        <TouchableOpacity onPress={() => navigation.dispatch(DrawerActions.openDrawer())}>
          <Text>Button</Text>
        </TouchableOpacity>
      ),
    })
  },
从“反应导航”导入{DrawerActions}
...
const Nav=createStackNavigator({
主页:{
屏幕:主页,
导航选项:({navigation})=>({
标题:“家”,
左校长:(
navigation.dispatch(DrawerActions.openDrawer())}>
按钮
),
})
},

每个都返回可调度的操作。
openDrawer
closeDrawer
toggleDrawer
,它们将抽屉状态从打开切换到关闭,反之亦然。希望这能有所帮助!

这不是框架,而是你

您不需要将app.js用作虚拟组件,您可以直接在app.js中使用相同的routes.js代码。在组件中封装导航器会带来问题

第二,您使用appregistry两次,您应该使用一次,它直接转到App.js,它没有抽屉,并且根本没有使用抽屉,这就是为什么undefined不是一个函数,没有抽屉

index.js[react native查看的第一个文件]

import { AppRegistry, Dimensions } from 'react-native';
import {name as appName} from './app.json';
import { createDrawerNavigator , createAppContainer } from 'react-navigation';
import SideMenu from './src/SideMenu'
import Routes from './src/Routes';

const drawernav = createDrawerNavigator({
  Item1: {
      screen: Routes,
    }
  }, {
    contentComponent: SideMenu,
    drawerWidth: Dimensions.get('window').width - 120,  
});

AppRegistry.registerComponent(appName, () => createAppContainer(drawernav));  //createAppContainer goes in your root navigator, in this case, a drawer
routes.js

import { createStackNavigator } from 'react-navigation';
import Home from './Home';
import Settings from './Settings';
import SideMenu from './SideMenu';
import { Button, Text, TouchableOpacity } from 'react-native';

const Nav = createStackNavigator({
  Home: {
    screen: Home,
    navigationOptions: ({navigation}) => ({
      title: "Home",
      headerLeft:(<TouchableOpacity onPress={() => navigation.openDrawer()}>
                <Text >Button</Text>
              </TouchableOpacity>
   ),
  })
 },
  Settings: {
    screen: Settings,
    navigationOptions: ({navigation}) => ({
    title: "Settings",
  })     
  },
}); 

export default Nav;

Milejczac我已经完成了你写的。现在它没有抛出错误,但是抽屉没有打开。对我来说,这是可行的,但是
切换抽屉
只是像打开一样工作,而不是关闭抽屉!嗨,你仍然有那个错误或者解决了它?
undefined is not a function (evaluating navigation.openDrawer()')
undefined is not a function (evaluating navigation.openDrawer()')
import { DrawerActions } from 'react-navigation'
...
const Nav = createStackNavigator({
  Home: {
    screen: Home,
    navigationOptions: ({navigation}) => ({
      title: "Home",
      headerLeft:(
        <TouchableOpacity onPress={() => navigation.dispatch(DrawerActions.openDrawer())}>
          <Text>Button</Text>
        </TouchableOpacity>
      ),
    })
  },
import { AppRegistry, Dimensions } from 'react-native';
import {name as appName} from './app.json';
import { createDrawerNavigator , createAppContainer } from 'react-navigation';
import SideMenu from './src/SideMenu'
import Routes from './src/Routes';

const drawernav = createDrawerNavigator({
  Item1: {
      screen: Routes,
    }
  }, {
    contentComponent: SideMenu,
    drawerWidth: Dimensions.get('window').width - 120,  
});

AppRegistry.registerComponent(appName, () => createAppContainer(drawernav));  //createAppContainer goes in your root navigator, in this case, a drawer
import { createStackNavigator } from 'react-navigation';
import Home from './Home';
import Settings from './Settings';
import SideMenu from './SideMenu';
import { Button, Text, TouchableOpacity } from 'react-native';

const Nav = createStackNavigator({
  Home: {
    screen: Home,
    navigationOptions: ({navigation}) => ({
      title: "Home",
      headerLeft:(<TouchableOpacity onPress={() => navigation.openDrawer()}>
                <Text >Button</Text>
              </TouchableOpacity>
   ),
  })
 },
  Settings: {
    screen: Settings,
    navigationOptions: ({navigation}) => ({
    title: "Settings",
  })     
  },
}); 

export default Nav;
const drawernav = createDrawerNavigator({
  Item1: {
      screen: Home,
      screen: Settings,
    }
  }, {
    contentComponent: SideMenu,
    drawerWidth: Dimensions.get('window').width - 120,  
});