Ответ может зависеть от того, какие версии react-navigation и react-navigation-drawer вы используете. В проекте с использованием «react-navigation»: «^ 4.0.10» и «react-navigation-drawer»: «^ 2.3.3» у меня работает вот что:
.............
import { NavigationEvents, NavigationActions } from 'react-navigation';
export default class HomeScreen extends Component {
..........
constructor(props){
super(props)
this.state = {language: 'English', menuOpen: false};
}
...................
render(){
const { navigation } = this.props;
const setParamsAction = NavigationActions.setParams({
params: { isAdmin: this.state.isAdmin },
key: 'PointsScreen',
});
const setParamsTwo = NavigationActions.setParams({
params: { isAdmin: this.state.isAdmin },
key: 'OtherScreen',
});
return(
<View style={styles.container}>
<NavigationEvents
onDidBlur={payload => {this.setState({menuOpen: true})}}
onWillFocus={payload => {this.setState({menuOpen: false});
this.backHandler = BackHandler.addEventListener('hardwareBackPress', () =>
{
this.props.navigation.dispatch(setParamsAction);
this.props.navigation.dispatch(setParamsTwo);
this.props.navigation.navigate('PointsScreen');
return true;
})}}
/>
В этом Например, я отправляю информацию на другие экраны, когда нажимаю Backhandler, но это работает так же для любого другого события навигации. Так, например, если вы хотите добавить это к кнопке открытия ящика, вы просто замените this.props.navigation.openDrawer (); для this.props.navigation.navigate ('PointsScreen');.
На других экранах у меня есть:
.............
render(){
const { navigation } = this.props;
const isAdmin = navigation.getParam('isAdmin') || '';
На экране ящика:
render(){
const { navigation } = this.props;
const pointsProps = navigation.getChildNavigation('PointsScreen');
const isAdmin = pointsProps.getParam('isAdmin') || "";