我在项目中使用react-navigation。我想在抽屉式导航中使用堆栈导航。我想在堆栈导航屏幕中使用this.navigation.toggleDrawer()
,但不要在堆栈导航屏幕中附加此内容。
// drawer-navigation.js
import React, { Component } from 'react';
import { DrawerNavigator } from 'react-navigation';
import StackNavigation from './stack-navigation';
import Screen1 from '../screens/screen1'
const RootDrawer = DrawerNavigator({
Home: {
screen: StackNavigation,
},
screen1: Screen1
},{
// set default screen
initialRouteName: 'Home',
drawerPosition: 'right'
})
export default class DrawerNavigation extends Component {
render() {
return (<RootDrawer />);
}
}
// stack-navigations
import React from 'react';
import { StackNavigator } from 'react-navigation';
import Home from '../screens/home';
const RootStack = StackNavigator({
Home: {
screen: Home,
navigationOptions:{
header: null
}
}
},{
// set default screen
initialRouteName: 'Home',
// defualt style for navigation bar
navigationOptions: {
headerStyle: {
backgroundColor: '#F55656',
},
headerTintColor: '#fff',
headerTitleStyle: {
fontWeight: 'bold',
},
},
})
export default class StackNavigation extends React.Component {
render() {
return (<RootStack />);
}
}
这是我的Home组件,我想在HomeSearch组件中添加一个按钮,单击该按钮会打开我的抽屉,但这会给我以下错误:
this.navigation.toggleDrawer()不是函数
// home.js (target screen)
import React, { Component } from 'react';
import { View, StyleSheet, StatusBar } from 'react-native';
import SplashScreen from 'react-native-smart-splash-screen';
import Header from '../components/header';
import HomeSearch from '../components/homeSearch';
class Home extends Component {
constructor(props){
super(props);
}
componentDidMount(){
// control splash screen
SplashScreen.close({
animationType: SplashScreen.animationType.scale,
duration: 1500,
delay: 1200,
})
}
render() {
return (
<View style={styles.container}>
<StatusBar
barStyle="light-content"
animated={true}
backgroundColor='#F55656'
/>
<Header/>
<HomeSearch onPress={this.navigation.toggleDrawer()}/>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex:1,
backgroundColor: 'rgba(236, 235, 231, 0.35)',
}
})
export default Home;
答案 0 :(得分:0)
这是导出ReactNavigation组件的错误方法。
export default class StackNavigation extends React.Component {
render() {
return (<RootStack />);
}
}
正确的方法。
export default RootStack;
您的RootDrawer
将使用相同的方式。
并使用onPress=this.props.navigation.toggleDrawer
。
createStackNavigation
和createDrawerNavigation
包装组件并将props传递给它们。
在您的情况下,您的drawerNavigator component
注入navigation
中与stackNavigator组件相关的道具。但是您的RootStack
无法从抽屉导航器接收任何道具,因为您用RootStack
包裹了React Component
。这就是为什么它不能很好地工作的原因。只需将导航组件导出为RootStack
和RootDrawer
。
this.props.navigation:将导航道具传递到堆栈导航器中的每个屏幕组件(定义)(有关更多信息,请参阅“深入的导航道具”)。
传递给导航器的导航道具仅包括状态,调度和addListener。这是导航器的当前状态,是用于发送动作请求的事件通道。