К настоящему времени я могу достичь этого только с помощью приставки.
import React, {Component} from 'react';
import {View, Text} from 'react-native';
import { Navigation } from 'react-native-navigation';
import { connect } from 'react-redux';
import { toggleSideMenu } from './../../store/actions/index';
class SideDrawer extends Component {
constructor(props) {
super(props);
Navigation.events().registerComponentDidDisappearListener(({ componentId }) => {
this.props.toggleSideMenu(false);
});
}
render() {
return (
<View>
<Text>This is the sidedrawer</Text>
</View>
);
}
}
const mapDispatchToProps = dispatch => {
return {
toggleSideMenu: (visible) => dispatch(toggleSideMenu(visible))
};
};
export default connect(null, mapDispatchToProps)(SideDrawer);
Затем я просто добавляю слушателей в компонент sidemenu.В зависимости от случая я обновляю текущее состояние компонента (видимое или нет).
Наконец, на компонентах, где я хочу использовать кнопку бокового ящика, я просто реализую метод navigationButtenPressed
.Затем я просто вызываю редуктор, чтобы узнать текущее видимое состояние, и переключаю его.
navigationButtonPressed({ buttonId }) {
const visible = !this.props.sideMenu;
Navigation.mergeOptions(this.props.componentId, {
sideMenu: {
'left': {
visible: visible
}
}
});
this.props.toggleSideMenu(visible);
}
Если есть более простой способ добиться этого, я буду рад узнать об этом.