Навигация закрыть ящик не работает, реагирует навигация

#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();