Javascript React native-未定义不是一个函数(计算navigation.openDrawer()';)
我是个新来的本地人。我要在这里分享我的代码 App.js Routes.jsJavascript 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
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,
});