【问题标题】:Prevent TouchableOpacity onpress when not mid-press?不按中间时防止TouchableOpacity onpress?
【发布时间】:2026-01-29 16:50:01
【问题描述】:

现在,当我快速按下我的 touchableopacitys 时,它会堆积一堆对 onpress 回调的调用,然后随着时间的推移执行它们。相反,我想要的是能够在 touchableopacity 被“按下”或褪色时防止进一步的回调,以便每次 touchableopacity 为“down”时仅调用一次 onpress,即一个完整的淡出周期然后重新进入. 我该怎么做?

【问题讨论】:

  • 您可以使用onPressInonPressOut 方法设置isPressed 布尔值。在您的 onPress 方法中,检查布尔值是否已经为真。如果是,则忽略该事件并返回。如果没有,则处理该事件。
  • 也许你可以在按下按钮时禁用它,并在执行回调时启用它?

标签: react-native touchableopacity


【解决方案1】:

我认为您想要做的是限制您的新闻回调,以便它们只运行一次。您可以使用 throttlingunderscore 库:例如:

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

【讨论】:

  • 这不会只是给按钮的激活增加一个定时延迟,而不是建立一些一键式逻辑吗?