goBack не работает должным образом в React Navigation - PullRequest
0 голосов
/ 04 февраля 2019
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 screen.

Я пробовал это с goBack(null) too, it takes me to the Splash screen when I press android back button from BeforeLogin` screen.

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

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

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

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

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

1 Ответ

0 голосов
/ 04 февраля 2019

На экране, с которого вы хотите закрыть экран после нажатия (я предполагаю, что в 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 из-за того, как там работает стековая навигация(на самом деле некоторые жизненные циклы они получают только один раз, поскольку они все еще монтируются под сетью).Поэтому в основном вам нужно полагаться на специальные события, которые отправляются самой навигацией.

...