我无法打开抽屉式导航器。按钮可能没有将导航道具传递给它。但是我不知道为什么会发生这种情况。在stacknavigator内部创建了抽屉导航器,以便在单击主屏幕上的按钮时显示一个汉堡菜单。
创建了一个堆栈导航器,以在屏幕Login,Signup,HomeScreen之间进行导航(HomeScreen本身是底部导航栏,并且Home Component在主屏幕中被呈现为默认组件)。创建了一个抽屉式导航器,可以在单击时打开(此按钮是Home的一部分),但未打开,错误为“ this2.props.navigation.dispatch不是函数/对象。
这是我的Drawernavigator.js文件
import React, {Component} from 'react';
import {createAppContainer , createDrawerNavigator } from 'react-navigation';
import {View,Text,Image,TouchableOpacity,Button} from 'react-native';
//importing customised components from other folders
import Home from '../components/Home';
import AboutPGMEE from './AboutPGMEE';
import FAQ from './FAQ';
import Settings from './Settings';
import ContactPGMEE from './ContactPGMEE';
import Notification from './Notifications';
import LogOut from './LogOut';
import TermsOfUse from '../Screens/InitialScreens/TermsOfUse';
import PrivacyPolicy from './PrivacyPolicy';
import ShareApp from './ShareApp';
import Videos from '../components/Videos';
import AppContainer from '../FirstNavigator';
import HomeScreen from '../HomeScreen';
const DrawerStack=createDrawerNavigator(
{
/*
HomeScreen:()=><HomeScreen/>,
//() => <YOUR COMPONENT/> to suppress the error modifications made here into the syntax
AboutPGMEE:()=>< AboutPGMEE/>,
FAQ: ()=><FAQ/>,
Settings:()=><Settings/>,
ContactPGMEE:()=><ContactPGMEE/>,
Notification:()=><Notification/>,
LogOut:()=><LogOut/>,
TermsOfUse:()=><TermsOfUse/>,
PrivacyPolicy:()=><PrivacyPolicy/>,
Home:()=><Home/>,
*/
// Home:Home,
HomeScreen:FAQ,
AboutPGMEE: AboutPGMEE,
FAQ:FAQ,
Settings:Settings,
ContactPGMEE:ContactPGMEE,
Notification:Notification,
LogOut:LogOut,
TermsOfUse:TermsOfUse,
PrivacyPolicy:PrivacyPolicy
},
{
initialRouteName:'HomeScreen',
backBehavior:'initialRoute',
drawerBackgroundColor:'powderblue',
drawerPosition:'left',
drawerWidth:300,
contentOptions: {
activeTintColor: '#e91e63',
},
}
)
const SideBarNavigator=createAppContainer(DrawerStack);
export default SideBarNavigator;
下面是我的Firstnavigator.js
import React from 'react';
import { Button, View, Text } from 'react-native';
import { createStackNavigator, createAppContainer,createSwitchNavigator } from 'react-navigation';
import HomeScreen from './HomeScreen';
import LogInScreen from './Screens/InitialScreens/LogInScreen';
import SignUpScreen from './Screens/InitialScreens/SignUpScreen';
import TermsOfUse from './Screens/InitialScreens/TermsOfUse';
import Home from './components/Home';
import SideBarNavigator from './sidebar/DrawerNavigator'
const RootStack = createSwitchNavigator(
{
LogInScreen: LogInScreen,
HomeScreen: HomeScreen,
SignUpScreen: SignUpScreen,
TermsOfUse:TermsOfUse,
Home:Home,
SideBarNavigator:SideBarNavigator,
},
{
initialRouteName: 'LogInScreen',
}
);
const AppContainer = createAppContainer(RootStack);
export default AppContainer;
下面是我的Home.js(仅包含相关事件代码。较大的文件,假定语法是可以的)
import React from 'react';
import {Col, Row, Grid} from 'react-native-easy-grid';
import {View,StyleSheet,Text,ScrollView,Image,TouchableOpacity } from 'react-native';
import Booklist from './BookList';
import {Card} from 'react-native-elements';
import {createStackNavigator,createAppContainer, DrawerActions} from 'react-navigation';
import SideBarNavigator from '../sidebar/DrawerNavigator';
export default class Home extends React.Component {
render() {
return (
<ScrollView style={{flex:1}}>
<View style={styles.container}>
<View style={[styles.boxContainer,styles.bigheader]}>
<View style={{flex:1,flexDirection:'column'}}>
<View style={{flex:1,flexDirection:'column',backgroundColor:'#8E24AA'}}>
<View style={{backgroundColor:'#8E24AA'}}>
<Text> </Text>
<View style={{flexDirection:'row',alignContent:'center', alignItems:'center',justifyContent:'center'}}>
<View style={{flex:1}}>
<TouchableOpacity onPress={()=>this.props.navigation.dispatch(DrawerActions.openDrawer())}>
<Image source={require('./tab.png')} style={{height:30,width:35}}/>
</TouchableOpacity>
</View>
<View style={{flex:12}}>
<Text style={{fontSize:30,textAlign:'center',fontWeight:'bold',color:'white'}}>
DASHBOARD
</Text>
#########
</View>
这是HomeScreen.js
import React from 'react';
import Home from './components/Home';
import Qbank from './components/Qbank';
import Test from './components/Test';
import Videos from './components/Videos';
import { BottomNavigation } from 'react-native-paper';
//import AppContainers from './components/Home';
const GoToHome=()=>{
return (<Home/>)
}
const GoToTest=()=>{
return ( <Test/>)
}
const GoToQbank=()=>{
return ( <Qbank/>)
}
const GoToVideos=()=>{
return ( <Videos/>)
}
export default class HomeScreen extends React.Component {
handleIndexChange=index=>this.setState({index});
state={index:0,routes:[{key:'Home',title:'Home',icon:'home'},
{key:'Qbank',title:'Qbank',icon:'question-answer'},
{key:'Test',title:'Test',icon:'timer-off'},
{key:'Videos',title:'Videos',icon:"video-call"},
],};
renderScene=BottomNavigation.SceneMap({
Home:GoToHome,
Test:GoToTest,
Qbank:GoToQbank,
Videos:GoToVideos,
});
render() {
return (
<BottomNavigation
navigationState={this.state}
onIndexChange={this.handleIndexChange}
renderScene={this.renderScene}
/>
)}
}
我期望单击Home.js中提到的图像可以打开抽屉。但这会带来错误。
答案 0 :(得分:0)
有关抽屉式导航和嵌套导航堆栈的示例:
const RootStack = createStackNavigator({
LogInScreen,
SignUpScreen,
TermsOfUse,
DrawerNav
}, {
...
});
const DrawerNav = createDrawerNavigator({
Home,
AboutPGMEE,
FAQ,
Settings,
ContactPGMEE,
Notification,
LogOut,
TermsOfUse,
PrivacyPolicy
}, {
...
})
Home也可以是另一个堆栈导航器。如果组件名称与所需键相同,则也可以删除组件分配。