BackHandler в React Native не работает - PullRequest
0 голосов
/ 05 февраля 2019
const RootNav = createStackNavigator(
  {
    Splash: {
        screen:Splash
    },
    BeforeLogin: {
        screen:BeforeLogin
    },    
    Signin: {
        screen:Signin,
    },
    Signup: {
        screen:Signup
    },
    Tabs: {
        screen:TabHolder,
    },
    ForgotPassword: {
        screen:ForgotPassword
    },
  } );

Ниже BackHandler, который я использовал на моем BeforeLogin экране.

  componentWillMount() { 
    BackHandler.addEventListener('hardwareBackPress', this.handleBackButton); 
  } 

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

  handleBackButton = () => { 
    BackHandler.exitApp(); 
  }

Ниже BackHandler, который я использовал на своем Signin экране и Signup экране.,

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

      this.props.navigation.navigate('BeforeLogin');
      return true;

    });
  } 

Мой экран BeforeLogin имеет 2 кнопки.Войдите и зарегистрируйтесь, чтобы перейти на экран Signin и Signup.

Теперь есть 2 сценария, с которыми я сталкиваюсь.

Сценарий 1: IЯ нахожусь на экране BeforeLogin, и я не перехожу на экран Signin или Signup.И теперь, когда я нажимаю кнопку возврата Android, он закрывает приложение.И это то, что я хочу, чтобы иметь возможность закрывать приложение, когда пользователь нажимает кнопку «Назад» с экрана BeforeLogin.

Сценарий 2: Я на экране BeforeLogin и перехожу клибо Signin, либо Signup экран.И теперь, когда я возвращаюсь к экрану BeforeLogin и затем нажимаю кнопку возврата Android, приложение не закрывается.

Как я могу решить мой Scenaraio 2: ?Пожалуйста, помогите.

1 Ответ

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

Не используйте backhander без необходимости, потому что он не будет работать на ios устройствах.

Либо перейдите с помощью this.props.navigation.replace("")

, т. Е. Если вы переходите от A к B ине хотите возвращаться к A, когда нажата кнопка «назад», просто не используйте this.props.navigation.navigate("B"), вместо этого используйте this.props.navigation.replace("B")

или

попробуйте новое свойство react-navigation@3.0 SwitchNavigator.

При этом по умолчанию приложение закрывается для всех экранов маршрута, используемых в навигаторе переключения при нажатии кнопки назад.Поэтому определите весь экран, для которого вы хотите выйти из приложения в SwitchNavigator, и все остальное в StackNavigator или что вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...