Есть ли способ принудительно размонтировать компонент? - PullRequest
1 голос
/ 24 февраля 2020

В моем мобильном приложении у меня есть экран с навигацией по вкладкам. На первой вкладке я хочу добавить обработчик возврата для выхода из приложения. Но в других вкладках я не хочу, чтобы это произошло. Я реализовал это, как указано ниже.

constructor(props) {
  super(props);

  this.handleBackButtonClick = this.handleBackButtonClick.bind(this);
  this.state = {};
}

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

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

handleBackButtonClick() {
  BackHandler.exitApp();
  return true;
}

Эта функциональность прекрасно работает в первой вкладке. Но моя проблема в том, что и в других вкладках, когда я нажимаю кнопку «Назад», приложение закрывается. Я хочу другую функциональность в этих вкладках. Согласно моим исследованиям, навигация по вкладкам не вызывает componentWillUnmount. Таким образом, он не удаляет список событий на вкладке навигации. Но я не мог найти другое решение.

Если есть какое-либо решение для реализации функции выхода из приложения только на первой вкладке, я был бы признателен.

1 Ответ

1 голос
/ 24 февраля 2020

Вы можете установить состояние и проверить это в handleBackButton. Например, если вы используете реагирующую навигацию, вы можете добавить что-то вроде этого:

<Tab.Navigator
    screenOptions={({ route }) => ({
        if (route.name === 'First tab') {
             this.setState({canExit: true});
        }
        else {
            this.setState({canExit: false});
        }
    })}
/>

, тогда вы можете изменить обработчик следующим образом:

handleBackButtonClick() {
    if(this.state.canExit){
       BackHandler.exitApp();
    }
    return true;
}
...