2016-08-01 1 views
0

私のアプリでアイドルタイマーを作成していて、各クリック、スクロールなどでタイマーをリセットしたいと思います。私のresetTimer()関数を各onPressイベントで呼び出すのはナンセンスです。ネイティブリアクト内の任意のタッチイベントにresetTimer()を呼び出すことができ、いくつかのトップレベルのイベントリスナーを持つに$(document).mousemove()$(document).mousedown()$(document).scroll()すべてのイベントにネイティブで反応する

任意の提案:ウェブでは、私は次のようにイベントリスナーをしますか?

答えて

3

TouchEventUtils(Facebookは彼らの反応ネイティブテストでそれを使用しています)、これができます私は含まれていfbjsを見つけたRECT-ネイティブコードを調査する日後に脆く、ハックだろう異なるタッチイベント状態関数(onTouchMove(event),onTouchStart(event),onTouchEnd(event))を使用する。

だから私がやったこと:

npm install fbjs --save 

そして単に私はすべての画面/ビューラッパーにそれを使用していて、したがって、私はすべての画面をカバーしている、私のルートをwrapps私のトップレベルのルートコンポーネントににonTouchStartを追加しました。それは、すべてのイベントでトップレベルのイベントリスナーとやって何かをaccesingするソリューションです、

/* 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> 
     ) 
    } 
} 

そして、それのthats:

だから私のコードは次のようになります。私はもっ​​と深く掘り下げなかった(これは私の場合には十分だった)ので、どのようなオブジェクトが得られ、さらにそれ以上のプロパティ(クリックされた要素のログを作成する)を特定するのに役立つかどうかはわかりません。

+0

ありがとう!これはまさに私がスクリーンセーバー機能に必要だったものです。 – pmont

+1

TouchEventUtilsをインポートする必要はありません。 onTouchStartは、Viewコンポーネントの組み込みサポートされている小道具です。 – pmont

+0

あなたは私の救い主です! – Bigdragon

1

正式なAPIはありません。

我々はCycle.js with React Nativeを使用することができますどのように調査の一環として、ネイティブ側から入ってくるすべてのグローバルイベントに耳を傾けるBatchedBridgeモジュールで定義された__fbBatchedBridgeグローバルにパッチを適用サルで実験を行いました。

私たちが得るのは生のタッチイベントなので、適切ではありませんでした。さまざまな種類のイベントをフィルタリングすることができませんでした。しかし、あなたが本当に望むのは、タッチイベントが発生したときを知ることであれば、その解決策があなたのために働く可能性があります。

それは、もちろん、:)

+0

もう一度お会いできます(私は@ Cycle.js confを満たしています)! :)あなたが言うように、良い提案、ビットハッキーが、私はそれだけで十分だと思う。 :) –

+0

とても面白いですね、ちょうど私がこのハックを最初に開発したのはCycleConfでした。あなたの名前を認識しませんでしたが、ちょうど純粋な偶然:) – jevakallio

関連する問題