Как установить «hardwareBackPress» в другой стек - PullRequest
0 голосов
/ 13 февраля 2020

enter image description here

//TermsPage.tsx
const resetAction = StackActions.reset({
  index: 0,
  actions: [NavigationActions.navigate({
    routeName: 'BottomTabNav',
    params:{showTerms:false}
  }),
  ],
});
componentWillUnmount() {
    BackHandler.addEventListener('hardwareBackPress',()=>{
      this.props.navigation.dispatch(resetAction)
      return true
    })
  }

Как установить eventListenner 'hardwareBackPress' для перехода к другому StackNavigator. Если я установлю как выше. Этот backpress работает на всех страницах. Я хочу установить этот слушатель только для TermsPage. И установите этот слушатель, чтобы перейти к другому StackNavigator

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Я решаю эту проблему с помощью функции pop(). На странице, где я хочу go другой стек, я добавил

const resetAction = StackActions.reset({
  index: 0,
  actions: [NavigationActions.navigate({
    routeName: 'BottomTabNav',
    params:{showTerms:false}
  }),
  ],
});
handleBackButtonClick() {
    this.props.navigation.dispatch(resetAction);
    return true;
  }

А на других страницах

handleBackButtonClick() {
    // @ts-ignore
    this.props.navigation.pop();
    return true;
  }
``` And voila
0 голосов
/ 14 февраля 2020

вы можете использовать этот пример, здесь мы привязываем этот метод в Constructer, а также вызываем эту функцию всякий раз, когда экран выполняет рендеринг

 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() {
        this.props.navigation.navigate('name of page where you want to nav');
        return true;
      }

Оттуда, где вы не хотите go назад, используйте это ..

 componentWillUnmount() {
    BackHandler.removeEventListener('hardwareBackPress', this.handleBackButton);
  }
 componentDidMount() {
    BackHandler.addEventListener('hardwareBackPress', this.handleBackButton);
  }
  handleBackButton() {
    return true;
  }

Это не позволит вам go вернуться со страницы, где вы находитесь, пожалуйста, импортируйте BackHandler из реактивной системы. надеюсь, что это поможет, не стесняйтесь сомнений.

...