React Native removeEventListener onPress

时间:2018-04-17 11:13:48

标签: android react-native react-navigation native-base

我有这个代码,我在我的应用程序的一个屏幕上禁用Android设备上的后退按钮,当我更改到另一个屏幕后,后退按钮再次在componentWillUnmount中启用,但是如果我移动到另一个屏幕按下面的按钮不会运行componentWillUnmount所以我决定将removeEventListener添加到onPress。由于某些原因,这不起作用,如果我按下按钮它会导航到我的其他屏幕,但它不会删除事件监听器。

同时 是的我还尝试将代码放在onPress的自己的功能中,这没有任何区别,但它仍然切换屏幕但没有重新启用我的后退按钮。

componentWillMount()
{
  BackAndroid.addEventListener('hardwareBackPress', () => {return true});
}

componentWillUnmount()
{
  BackAndroid.removeEventListener('hardwareBackPress');
}

render(){
  return(
    <Button 
      style={styles.button} 
      onPress={() => {BackAndroid.removeEventListener('hardwareBackPress'); this.props.navigation.navigate('home');}}>
    </Button>
  );
}

1 个答案:

答案 0 :(得分:2)

BackAndroid.addEventListener和BackAndroid.removeEventListener的签名不一样。因此,还没有在ComponentWillUnmount中删除hardwareBackPress。请尝试这样的事情:

constructor() {
   this._onBack = this._onBack.bind(this)
}
_onBack() {
   return true;
}

componentWillMount()
{
  BackAndroid.addEventListener('hardwareBackPress', this._onBack);
}

componentWillUnmount()
{
  BackAndroid.removeEventListener('hardwareBackPress', this._onBack);
}