Кнопка не будет реагировать, пока я не нажму ее несколько раз в React Native

У меня возникла странная ошибка в моем проекте React Native Android.

Существует страница медиаконтроллера, на которой реализован пользовательский аудиоплеер (с кнопками Воспроизведение/Пауза, Далее, Предыдущий и т. д.), и он работает. просто отлично на симуляторах Android, но когда я пытаюсь нажать на любую его кнопку на реальном устройстве, он просто не отвечает, пока я не нажму его около 10 раз.

Несколько причин, о которых я могу думать:

  • На жест панорамирования реагирует вся страница, поэтому в симуляторе событие щелчка распознается как щелчок, а на устройстве оно распознается как жест панорамирования.

  • Я получаю около 1000 предупреждений об Warning: You are manually calling a React.PropTypes validation function... (из которых решением может быть этот ответ), и это может сыграть с производительность приложения. (Эта проблема исправлена, но все еще происходит)

  • В приложении используется несколько библиотек, которые реализованы только для iOS, например react-native-streamingkit и react-native-mpremotecommandcenter , и один из них может быть причиной проблемы.

Я правильно обхожу это? Может ли быть какая-то другая причина, вызывающая проблему?


person technophyle    schedule 08.08.2016    source источник


Ответы (1)


Я исправил ошибку - причина была №1 среди тех, что я перечислил.

Функция onMoveShouldSetPanResponderCapture() в одном из моих PanResponder содержала этот код:

onMoveShouldSetPanResponderCapture: (evt, gestureState) => {
    return dx != 0 && dy != 0 && this._canPan;
}

Другими словами, код устанавливал порог различия между касанием и панорамированием на ноль!

Я изменил его следующим образом, и теперь он прекрасно работает:

onMoveShouldSetPanResponderCapture: (evt, gestureState) => {
    return (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5) && this._canPan;
}

Установите порог в 10 пикселей, если хотите.

person technophyle    schedule 08.08.2016