Я не уверен, что это именно то, что вы ищете, но это то, что я делаю в моем основном файле:
import Home from './components/home'
import OtherPage from './components/otherpage'
import DrawerScreen from './components/drawerscreen'
import LoginScreen from './components/loginscreen'
const navigator = createDrawerNavigator(
{
Home: {screen: Home},
OtherPage: {screen: OtherPage},
LoginScreen: { screen: LoginScreen },
},
{
contentComponent: ({ navigation }) => (
<DrawerScreen navigation={navigation} />
),
drawerWidth: 300,
initialRouteName: "LoginScreen"
}
);
const AppContainer = createAppContainer(DrawerNavigator);
export default class App extends Component {
render() {
return (
<AppContainer />
);
}
}
И затем в моем файле для компонента ящика я делаю что-то вроде:
import { DrawerActions, NavigationEvents, NavigationActions } from 'react-navigation';
export default class DrawerScreen extends Component {
navigateToScreen = (route) => () => {
const navigateAction = NavigationActions.navigate({
routeName: route
});
this.props.navigation.dispatch(navigateAction);
this.props.navigation.dispatch(DrawerActions.closeDrawer())
}
render () {
const { navigation } = this.props;
const homeProps = navigation.getChildNavigation('Home');
console.log(homeProps);
console.log(navigation);
return (
<View>
<ScrollView>
<View>
<View>
<View>
<Button onPress={() => this.props.navigation.navigate('Home')} title="Home"/>
</View>
</View>
<View>
<View style={styles.myMargins}>
<Button onPress={() => this.props.navigation.navigate('OtherPage', {propsFromDrawer: "blahblahblah", styleprops: "blahblahblah"})} title="Other Page"/>
</View>
</View>
</View>
</ScrollView>
</View>
);
}
}
Здесь ящик будет получать реквизиты из Дома и отправлять другие реквизиты на «Другая страница» при нажатии на кнопку «Другая страница». Я не уверен, будет ли это работать со структурой того, что вы делаете, но это то, что работает в моем приложении.
Редактировать: вот пример способов навигации из OtherPage.
import React, { Component } from 'react';
import {
View,
Text,
ScrollView,
StyleSheet,
ActivityIndicator,
TouchableOpacity,
BackHandler,
} from 'react-native';
import { NavigationEvents, NavigationActions } from 'react-navigation';
import { Header } from 'react-native-elements';
export default class OtherPage extends Component {
static navigationOptions = {
title: 'OtherPage',
headerStyle: {
backgroundColor: '#0000CD',
},
headerTintColor: '#fff',
};
constructor(props){
super(props)
this.state = {stuffInState: 'blahblahblah'}
}
componentDidMount() {
this.backHandler =
BackHandler.addEventListener('hardwareBackPress', () => {
this.props.navigation.navigate('Home');
return true;
});
}
componentWillUnmount() {
this.backHandler.remove();
}
render(){
const { navigation } = this.props;
const propsFromDrawer = navigation.getParam('propsFromDrawer') || '';
const styleProps = navigation.getParam('styleprops') || '';
//console.log(this.state);
//console.log(navigation);
return(<View>
<NavigationEvents
onWillFocus={payload => {this.setState({stuff: stuffFromProps})}}
/>
<Header
leftComponent={{ icon: 'menu', color: '#fff', onPress: () =>
this.props.navigation.openDrawer() }}
centerComponent={{ text: this.state.title, style: { color: '#fff' } }}
rightComponent={{ icon: 'home', color: '#fff', onPress: () =>
this.props.navigation.navigate('Home')}}
/>
<View>
<TouchableOpacity
onPress={() =>
this.props.navigation.navigate('Home', {
propsImSending: 'blahblahblah',
})} title="Home"
>
<Text>Home</Text>
</TouchableOpacity>
</View>);
}
}