Обработчик кнопки «назад» не вызывается реагирует на нативный - PullRequest
0 голосов
/ 02 октября 2019

Я столкнулся с этой утомленной проблемой с обработчиком кнопки возврата Android. Предположим, у меня есть 3 экрана, A, B и C. Я использую стековый навигатор. A переходит к B, который переходит к C.

Я хочу иметь возможность вернуться от C к B, но не от B к A. Для этого в B я делаю это:

async componentDidMount() {
    if (Platform.OS === "android") {
      BackHandler.addEventListener(
        "hardwareBackPress",
        this.onBackButtonPressAndroid.bind(this)
      );
    }
 }
 
 onBackButtonPressAndroid = () => {
    Alert.alert("Backed"); //this is just to test
    return true; //make it true to prevent going back
  };

А в С:

 if (Platform.OS === "android") {
      BackHandler.addEventListener(
        "hardwareBackPress",
        this.onBackButtonPressAndroid.bind(this)
      );
    }

onBackButtonPressAndroid = () => {
    this.props.navigation.goBack(null);
    return true;
  };

Я удалил прослушиватель событий в componentWillUnmount.

Когда я иду от А к В и нажимаю кнопку «Назад», он ведет себя правильно: он не возвращается к А, и я вижу предупреждение.

Но потом, когда я иду от Бна C, затем вернитесь к B (используя кнопку «назад»), если я снова нажму кнопку «назад», он вернется к A и не увидит предупреждение.

Почему это происходит?

Обновление Если я не установил обработчик событий в C, то при нажатии кнопки назад я вижу предупреждение! это означает, что обработчики в B вызывают!

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