反应本机 removeEventListener onPress
React Native removeEventListener onPress
我有这段代码,其中 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>
);
}
BackAndroid.addEventListener和BackAndroid.removeEventListener的签名不一样。因此,hardwareBackPress 尚未在 ComponentWillUnmount 中删除。请尝试这样的事情:
constructor() {
this._onBack = this._onBack.bind(this)
}
_onBack() {
return true;
}
componentWillMount()
{
BackAndroid.addEventListener('hardwareBackPress', this._onBack);
}
componentWillUnmount()
{
BackAndroid.removeEventListener('hardwareBackPress', this._onBack);
}
我有这段代码,其中 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>
);
}
BackAndroid.addEventListener和BackAndroid.removeEventListener的签名不一样。因此,hardwareBackPress 尚未在 ComponentWillUnmount 中删除。请尝试这样的事情:
constructor() {
this._onBack = this._onBack.bind(this)
}
_onBack() {
return true;
}
componentWillMount()
{
BackAndroid.addEventListener('hardwareBackPress', this._onBack);
}
componentWillUnmount()
{
BackAndroid.removeEventListener('hardwareBackPress', this._onBack);
}