Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 为什么BackHandler.addEventListener在单击设备的“后退”按钮时会多次触发?_React Native_Expo - Fatal编程技术网

React native 为什么BackHandler.addEventListener在单击设备的“后退”按钮时会多次触发?

React native 为什么BackHandler.addEventListener在单击设备的“后退”按钮时会多次触发?,react-native,expo,React Native,Expo,我创建了世博推送通知。 1) 当我收到通知时,我会使用navigation.push导航到detailProduct屏幕,当我收到其他通知时也是如此 2) 我是这样说的 BackHandler.addEventListener ('hardwareBackPress', this.handleBackPress) 单击“后退”按钮时收听事件 handleBackPress = () => {     console.log ("I clicked on the back button")

我创建了世博推送通知。 1) 当我收到通知时,我会使用navigation.push导航到detailProduct屏幕,当我收到其他通知时也是如此

2) 我是这样说的

BackHandler.addEventListener ('hardwareBackPress', this.handleBackPress)
单击“后退”按钮时收听事件

handleBackPress = () => {
    console.log ("I clicked on the back button")
}.
我的问题是,例如,当我导航到产品详细信息屏幕2次,然后单击“上一步”按钮时,返回到上一个屏幕是完全正常的。但是
handleBackPress()
功能将执行2次,即消息将显示2次:

I clicked on the back button
I clicked on the back button
想象一下,当我浏览5到6次屏幕时。 情况将是复杂的


为什么
BackHandler.addEventListener
会这样做,我们如何在每次单击后退按钮时运行
BackHandler.addEventListener
一次?

BackHandler函数配置不显示
布尔返回值

返回值应为
true
,以正常结束函数

用法

componentDidMount(){
BackHandler.addEventListener('hardwareBackPress',this.handleBackPress);
}
组件将卸载(){
BackHandler.removeEventListener('hardwareBackPress',this.handleBackPress);
}
车把靠背压力=()=>{
这个.props.navigation.push(“你想要屏幕”);
this.props.navigation.goBack(null);//如果您的屏幕在同一堆栈中
返回true;
}

离开详细信息屏幕时是否使用removeEventListener?@Auticcat。该问题无法解决。在完成日志共享您使用的代码后,尝试在handleBackPress函数中添加return true。@Auticcat。我试过了,但无法回到上一个屏幕我做到了。是的,该函数将运行一次,但您无法返回(您无法导航到上一个屏幕)您仍在同一屏幕中,这是由以下语句引起的:return true@zakitutu转到要返回函数的屏幕。如果您在同一堆栈中,则可以使用“goback”。我的答案更新了