Предотвратить TouchableOpacity при нажатии, когда не в середине?

прямо сейчас, когда я очень быстро нажимаю сенсорные непрозрачности, он накапливает кучу вызовов обратного вызова onpress, а затем выполняет их с течением времени. Вместо этого я хочу иметь возможность предотвратить дальнейшие обратные вызовы, пока сенсорная непрозрачность "нажата" или исчезла, так что onpress вызывается только один раз для каждого раза, когда сенсорная непрозрачность "вниз", т.е. один полный цикл затухания, а затем обратно Как бы я это сделал?


person Dizzykiwi    schedule 03.01.2018    source источник
comment
Вы можете использовать методы onPressIn и onPressOut для установки логического значения isPressed. В вашем методе onPress проверьте, истинно ли логическое значение. Если это так, игнорируйте событие и возвращайтесь. Если нет, обработайте событие.   -  person fubar    schedule 03.01.2018
comment
Может быть, вы можете отключить кнопку при нажатии и включить ее при выполнении обратных вызовов?   -  person Ahsan Ali    schedule 03.01.2018


Ответы (1)


Я думаю, что вы пытаетесь сделать, вы хотите ограничить свои обратные вызовы при печати, чтобы они запускались только один раз. Для этого вы можете использовать throttling с underscore библиотекой: например:

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
     _.throttle(
        this.onPressThrottle.bind(this),
        200, // no new clicks within 200ms time window
    );
  }
  onPressThrottle() {
     // this only runs once per 200 milliseconds
  }
  render() {
    return (
      <View>
        <TouchableOpacity onPress={this.onPressThrottle}>
        </TouchableOpacity>
      </View>
    )
  }
}
person Suyog K.C    schedule 03.01.2018
comment
Не добавит ли это просто временную задержку активации кнопки, а не установит некую логику одного нажатия? - person Dizzykiwi; 03.01.2018