React Native: кнопка возврата Android не работает, когда экран перемонтируется - PullRequest
0 голосов
/ 30 августа 2018

Я использовал componentDidMount и componentDidUnmount для кнопки Android для работы. Но когда я снова прихожу к тому же экрану с другого экрана, функция, которую я поместил в кнопку возврата Android, не работает. Первоначально он работает, когда я загружаю экран в первый раз, но когда я перехожу на другой экран и снова возвращаюсь к этому экрану, функция, которую я поместил в кнопку назад, не работает.

когда я нажимаю на навигационную панель ниже. Когда я перехожу на другой экран и возвращаюсь, он работает нормально. Но когда я нажимаю на навигационную панель и перехожу на другой экран, а затем снова возвращаюсь к экрану, функция не помогает !! Я в большой дилемме. В частности, чтобы было понятно: я на главном экране, я перехожу к описанию поста, а затем возвращаюсь на домашний экран, работает кнопка «назад» для Android. Но когда я нажимаю на навигационную панель, переходите на другой экран. а затем вернитесь, нажав на панель навигации, функция не работает. -

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

async handleBackButtonClick() {

Alert.alert(
    'Exit the app?',
    'Are you sure you want to exit the app?',

    [
      {text: 'Cancel', onPress: () => console.log('Cancel Pressed'), style: 'cancel'},
      {text: 'OK', onPress: () => BackHandler.exitApp()},
    ],
    { cancelable: false }
  )

}

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Сначала убедитесь, какой метод вызывается, когда вы снова вернетесь к экрану.

componentWillMount() {

    console.log("componentWillMount");


    this.props.navigation.addListener(
      'willBlur',
      payload => {
        console.log('willBlur', payload);
      }
    );

    this.props.navigation.addListener(
      'willFocus',
      payload => {
        console.debug('willFocus', payload);
      }
    );

    this.props.navigation.addListener(
      'didFocus',
      payload => {
        console.debug('didFocus', payload);
      }
    );

    this.props.navigation.addListener(
      'didBlur',
      payload => {
        console.debug('didBlur', payload);
      }
    );
}



componentDidMount(){
    console.log("componentDidMount")
}

componentDidUpdate(){
    console.log("componentDidUpdate")
}

componentWillUnmount(){
    console.log("componentWillUnmount")
}

затем запустите вашу функцию.

0 голосов
/ 31 августа 2018

Вы просто используете addListener для навигации.

Как это:

componentDidMount() {

    this.props.navigation.addListener(
      'didFocus',
      payload => {
        BackHandler.addEventListener('hardwareBackPress',this.handleBackButtonClick);
      }
    );

}

перейдите по этой ссылке: addlistener-подписка на обновления-на-навигацию-жизненный цикл

...