#javascript #react-native #navigation-drawer #react-navigation-drawer
#javascript #react-native #навигация-ящик #react-navigation-drawer #реагирует-навигация-ящик
Вопрос:
Мы используем React Navigation для нашего приложения React Native и показываем боковую панель. Все работает нормально, но закрыть ящик не работает.
На самом деле, я должен закрыть ящик, пока пользователь нажимает на кнопку возврата устройства Android.
Итак, что я вызываю navigation.closeDrawer();
внутри метода обработчика кнопки возврата.
backButtonTap = () => {
const { navigation } = this.props;
navigation.closeDrawer();
DeviceEventEmitter.emit('NavigatedToNewRoute', {
route: 'screen1'
});
navigation.navigate('screen1');
}
Но, хотя мы пытались закрыть с помощью кнопки возврата устройства, боковой ящик не закрывался.
OpenDrawer
метод работает нормально.
И у меня есть несколько экранов на моей боковой панели. Итак, в каждом классе мне нужно вызывать этот метод closeDrawer или мы можем вызвать какой-либо один глобальный класс? Мне просто нужно закрыть, если ящик открывается, И если пользователь нажмет на кнопку возврата устройства, я должен закрыть этот ящик.
Есть предложения?
Ответ №1:
Можете ли вы попробовать следующее?
import { DrawerActions } from "react-navigation";
...
backButtonTap = () => {
const { navigation } = this.props;
//navigation.closeDrawer();
this.props.navigation.dispatch(DrawerActions.closeDrawer());
DeviceEventEmitter.emit('NavigatedToNewRoute', {
route: 'screen1'
});
navigation.navigate('screen1');
}
Комментарии:
1. Проблема в том, что мы вызываем BackHandler.addEventListener(‘hardwareBackPress’, this.backPressHandler); в методе componentDidMount и удаляем его в componentWillUnmount, но, если мы перейдем на другой экран и вернемся к тому же экрану, этот метод не запускается. Итак, где мы можем написать addlistener вместо componentDidMount?
Ответ №2:
Я думаю, что у react-navigation есть функция по умолчанию для закрытия ящика. и если это не работает, попробуйте также передать навигационный реквизит в функцию, чтобы он мог легко справиться с этим.
this.props.navigationProps.toggleDrawer();