React native侦听所有事件
React native listen to all events
我正在我的应用程序中创建空闲计时器,我想在每次点击、滚动等时重置计时器。在每次onPress事件中调用我的resetTimer()
函数似乎是无稽之谈。在网络中,我会做一些事件监听器,比如:$(document).mousemove()
、$(document).mousedown()
、$(document).scroll()
等等。
关于让一些顶级事件监听器在React native中的任何触摸事件上调用resetTimer()
,有什么建议吗?
经过一天的rect原生代码研究,我发现fbjs包含TouchEventUtils
(facebook在其react原生测试中使用它),它允许使用不同的触摸事件状态函数(onTouchMove(event)
、onTouchStart(event)
、onTouchEnd(event)
)。
所以我做了什么:
npm install fbjs --save
并简单地将onTouchStart
添加到我的顶级根组件中,该组件封装了我的路由,因此我在所有屏幕/视图包装器上使用它时覆盖了所有屏幕。
所以我的代码看起来像这样:
/* rest of my imports */
import TouchEventUtils from 'fbjs/lib/TouchEventUtils';
class Root extends Component {
onTouchStart(){
//my code to properly reset session timer
}
render() {
return (
<View
onTouchStart={this.onTouchStart}
>
{/*My routes*/}
</View>
)
}
}
就是这样,这就是访问顶级事件侦听器并在每个事件上做一些事情的解决方案。我没有深入挖掘(因为这对我的案例来说已经足够了),所以我不确定它得到了什么对象,也不确定它是否有助于识别任何进一步的属性(即记录点击的元素)。
我认为没有官方的API。
作为研究如何将Cycle.js与React Native一起使用的一部分,我们在monkey上对BatchedBridge模块定义的__fbBatchedBridge
全局进行了修补实验,以监听来自本机端的所有全局事件。
它不适合我们,因为我们得到的都是原始的触摸事件,不可能过滤不同类型的事件。但是,如果你确实想知道什么时候发生任何触摸事件,那么这个解决方案可能对你有用。
当然,它会变得脆弱和粗糙:)
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 对iPad上的点击事件反应缓慢
- 事件和状态
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- React Native Android 原生 UI 组件中的自定义事件
- Firebase “value”事件不会在 React Native 中触发
- React Native - 在 AppDelegate (iOS) 中将事件从 Native 发送到 JavaScri
- 如何在React Native中将onPress事件映射到单个svg对象上
- 当模态打开时,停止新闻事件的传播/防止React Native应用程序冒泡
- React native侦听所有事件
- React Native-捕捉所有触摸事件,但可触摸's没有冒泡
- 如何在react native中使用RCTEventEmitter接收事件回调