最近遇到个需求,在Modal里面,点击游戏列表,用户马上点击android回退键取消进入游戏。

这个并不是很难实现,添加个监听事件就好了了

百度一下就可以得到这样的结论:

import { BackHandler } from 'react-native';
 //页面获取焦点的时候,监听回退键
 BackHandler.addEventListener('hardwareBackPress', this.backHand);

 //页面销毁时候,取消回退键
 BackHandler.removeEventListener('hardwareBackPress', this.backHand);

在页面上的确可以执行,

可是Modal里面写这段代码就不行了,

百度?是不可能百度得到这个问题,也许这个笔记后,你可以百度的到。。。。

谷歌了下,很多人都说在Modal里面无效,所以我尝试下再也没组件里面监听,通过store来识别用户是否摁下了回退键。

机智如我~_~''

然而,并不行。。。

当modal覆盖在页面组件上面的时候,页面组件里面的回调不会执行。。

头大,当时就懵逼了,wtf?

最后去github官方仓库看下,的确有这个坑:

https://github.com/facebook/react-native/issues/19147

万能的群友当晚也没有给我任何回复,凌晨1点了。。。。都抱媳妇去了吧。。

第二天,果然得到了我想要的思路。。。。

Modal不是也有安卓回退键监听么,就在这里判断下:

1.如果进入游戏中的弹窗出来了,就在Modal的回调函数里面修改store,然后关闭“进入游戏中“的弹窗,但是不关闭Modal

2.否则,关闭Modal

解决!

不过这样就就会出现了重复代码,因为我有多个modal就得写多个这样的代码。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~后续待更新。。。~~~~~~~~~~~~~~~~~~~~~~~~~

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐