如何将“ hardwareBackPress”设置为另一个堆栈

时间:2020-02-13 06:58:57

标签: javascript react-native navigation react-native-android addeventlistener

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
    })
  }

如何设置“ hardwareBackPress” eventListenner导航到另一个StackNavigator。如果我像上面那样设置。此backpress可在所有页面中使用。我只想为TermsPage设置此侦听器。并将此侦听器设置为导航到另一个StackNavigator

2 个答案:

答案 0 :(得分:-1)

您可以使用此示例,在这里我们将此方法绑定到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;
      }

您不想回去的地方使用它。

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

它不会让您从所在的页面返回,请从react-native导入BackHandler。 希望对您有所帮助。

答案 1 :(得分:-1)

我使用功能pop()解决了这个问题。 在页面中,我想添加另一个堆栈的地方

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