goBack не работает должным образом в React Navigation

const RootNav = createStackNavigator(
  {
    Splash: {
        screen:Splash
    },
    BeforeLogin: {
        screen:BeforeLogin
    },    
    Signin: {
        screen:Signin,
    },
    Signup: {
        screen:Signup
    },
    Tabs: {
        screen:TabHolder,
    },
    ForgotPassword: {
        screen:ForgotPassword
    },
  } );

Я использую это componentWillMount в BeforeLogin экран. Я хочу закрыть приложение, когда пользователь нажимает кнопку возврата Android.

 componentWillMount() {          // In BeforeLogin Screen
   BackHandler.addEventListener('hardwareBackPress',() => {        
       BackHandler.exitApp(); 
     });  
  }

И в Signup а также Signin экран, я использую ниже componentWillMount

componentWillMount() {
    BackHandler.addEventListener('hardwareBackPress',() => {   

      this.props.navigation.goBack();
      return true;

    });
  } 

Я не могу использовать this.props.navigation.navigate('BeforeLogin) потому что на экране входа у меня есть текст У вас нет аккаунта? Зарегистрируйтесь сейчас, чтобы перейти к экрану регистрации.

А уже есть аккаунт? Войдите сейчас на моем экране регистрации, который переходит к экрану входа.

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

Я попробовал это с goBack(null) too, it takes me to the всплеск screen when I press android back button from Перед тем, как войти в экран.

********************** Второй вариант, который тоже не сработал ******************** **

я использовал this.props.navigation.pop(1); в Signup а также Signin Экран. Это берет меня к Splash экран, когда я нажимаю кнопку возврата Android из BeforeLogin экран.

Пожалуйста помоги.

ОБНОВЛЕННЫЙ КОД

Пожалуйста, проверьте ссылку ниже. Это код моего вопроса. https://gist.github.com/shubham6996/2c69f5a270d88c710ab61487639bf1af

1 ответ

На экране, с которого вы хотите закрыть экран после нажатия (я полагаю, в BeforeLogin):

constructor(props) {
    super(props);
    this._didFocusSubscription = props.navigation.addListener('didFocus', payload =>
      BackHandler.addEventListener('hardwareBackPress', this.onBackButtonPressAndroid)
    );
  }

  componentDidMount() {
    this._willBlurSubscription = this.props.navigation.addListener('willBlur', payload =>
      BackHandler.removeEventListener('hardwareBackPress', this.onBackButtonPressAndroid)
    );
  }

  onBackButtonPressAndroid = () => {
BackHandler.exitApp();
return true;
}

Вы не можете полагаться на обычные жизненные циклы React в React Navigation из-за того, что там работает навигация по стекам (фактически они получают некоторые жизненные циклы только один раз, так как они все еще монтируются в сети). Поэтому в основном вам нужно полагаться на специальные события, которые отправляются самой навигацией.