2016-08-01 1 views
0

Я создаю простоя таймера в своем приложении, и я хочу сбросить таймер на каждый клик, прокрутку и т. Д. Кажется, что бессмысленно называть мою функцию resetTimer() на каждом событии onPress. В сети я бы слушатели событий, как: $(document).mousemove(), $(document).mousedown(), $(document).scroll() и т.д.React native прослушать все события

Любые предложения о том, имеет некоторые слушатели событий верхнего уровня, которые могли называют resetTimer() на любом сенсорном событии в React родной?

ответ

3

После дня исследования прямоугольника родной код, который я нашел fbjs, который содержит TouchEventUtils (facebook использует его в своих родных реагируют тесты) что позволяет для использования различных состояний состояния сенсорных событий (onTouchMove(event), onTouchStart(event), onTouchEnd(event)).

Так что я сделал:

npm install fbjs --save 

И просто добавил onTouchStart к моему началу компонента уровня Коренного что wrapps моих маршрутов, поэтому я все экраны покрыты, как я использую его на все экранах/просмотры обертки.

Так что мой код выглядит примерно так:

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

И вот это, это решение экранного слушателя событий верхнего уровня и делать что-то на каждом мероприятии. Я не копал глубже (поскольку этого было достаточно для моего случая), поэтому я не уверен, какой объект он получает, и может ли он помочь идентифицировать любые дополнительные свойства (т. Е. Сделать запись щелкнутых элементов).

+0

Спасибо! Это именно то, что мне нужно для функции заставки. – pmont

+1

Обратите внимание, что импорт TouchEventUtils не требуется. onTouchStart - встроенная поддерживаемая поддержка компонента View. – pmont

+0

Ты мой спаситель !! – Bigdragon

1

Я не думаю, что для этого есть официальный API.

В рамках исследования, как мы могли бы использовать Cycle.js with React Native, мы сделали эксперимент на обезьяне Патчении __fbBatchedBridge глобальных, определенный BatchedBridge модуля для прослушивания всех глобальных событий, поступающих из родной стороны.

Это не подходит для нас, потому что все, что мы получаем, - это события с сырым касанием, и было невозможно фильтровать разные типы событий. Но если вы действительно хотите знать, когда происходит какое-либо событие касания, это решение может сработать для вас.

Было бы, конечно, быть хрупкими и Hacky :)

+0

Приятно видеть вас снова (мы встретили @ Cycle.js conf)! :) Хорошее предложение, немного хаки, как вы говорите, но я думаю, что этого достаточно, мне нужно. :) –

+0

Ха-ха, это так смешно, это было именно на CycleConf, где я разработал этот хак в первую очередь. Не узнал твое имя, хотя, просто чистое совпадение :) – jevakallio

Смежные вопросы