Обработчик кнопки «Назад», работающий на каждом экране после смены навигатора ящика в реакции - родной - PullRequest
0 голосов
/ 12 июня 2019

Я создаю реагирующее собственное приложение, в котором могут быть два типа пользовательских моделей и членов. Теперь у каждого есть разные drawer navigator, поскольку оба имеют разные данные, и оба этих ящика находятся внутри основного stack navigator, который является основным навигатором. для приложения. Теперь в обоих обоих drawer navigator.


const RootStack = createStackNavigator({
  Splash : { screen: Splash },
  PrivacyPolicy : { screen: PrivacyPolicy},
  Welcome : { screen: Welcome },
  Login : { screen: Login },
  HomeMember: {screen: memberdrawerNavigator},
  HomeModel: {screen: modeldrawerNavigator},
  OtpChangePassword : { screen: OtpChangePassword},


}, {
     headerMode: 'none',
     initialRouteName: 'Splash'

})

У меня есть домашняя страница, различная как для типа участника, так и для домашней страницы, и я реализовал обработчик возврата, как этот.


 handleBackWithAlert = () => {

  if (this.props.isFocused) {

            if(this.state.loading_status){
                   this.setState({loading_status:false})
            }

          else{
                  Alert.alert(
                  'Exit App',
                  'Exiting the application?',
                  [
                  {
                    text: 'Cancel',
                    onPress: () => console.log('Cancel Pressed'),
                    style: 'cancel'
                  },
                  {
                    text: 'OK',
                    onPress: () => BackHandler.exitApp()
                  }
                  ],
                  {
                  cancelable: false
                  }
                );
          }

return true;
}
}



componentWillMount() {

BackHandler.addEventListener('hardwareBackPress',this.handleBackWithAlert);
//this.props.navigation.dispatch(DrawerActions.closeDrawer());
this.props.navigation.closeDrawer();

}

componentWillUnmount() {
 BackHandler.removeEventListener('hardwareBackPress', this.handleBackWithAlert);

}

Так как я хотел проверить обратную обработку только на определенной странице, поэтому я экспортировал свой компонент следующим образом.

export default withNavigationFocus(HomePage);

Теперь, в чем проблема, если предположить, что я использую учетную запись участника, и после этого я выхожу, а затем входу в систему с учетной записью модели, тогда этот обработчик возврата работает на каждом экране, почему? И если я закрою или закрою это приложение без выхода из системы и перезагрузки, эта проблема исчезнет.

Вот мой код, который вызывается при выходе из системы

 AsyncStorage.clear()
ToastAndroid.show("Logged Out Successfully !",ToastAndroid.SHORT);

              const resetAction = StackActions.reset({
                index: 0,
                actions: [NavigationActions.navigate({ routeName: 'Welcome' })],
              });
              this.props.navigation.dispatch(resetAction);

Пожалуйста, помогите мне решить эту проблему. Заранее спасибо.

1 Ответ

0 голосов
/ 12 июня 2019

Насколько я понимаю, что-то не так с вашими BackHandler слушателями.может быть, вы не удаляете BackHandler слушатель на componentWillUnmount?

...