长按 React Native 不断增加计数器

Posted

技术标签:

【中文标题】长按 React Native 不断增加计数器【英文标题】:Continuously increasing counter with long press React Native 【发布时间】:2016-07-12 16:41:10 【问题描述】:

我在TextInput 旁边有一个按钮,按下时会增加计数器。

   <TouchableWithoutFeedback onPress=() => this.increaseAmount(step, rowID)>
      <View style=styles.amountPlusButtonContainer>
        <Text style=styles.amountButtonText>+</Text>
      </View>
    </TouchableWithoutFeedback>

目前每次点击按钮时它都会增加 1。我想要实现的是只要用户按下它就不断增加计数器。

我曾尝试使用setInterval(),但我不知道何时停止它,也不知道这是否是解决此问题的正确方法。

【问题讨论】:

【参考方案1】:

我认为使用setInterval 是一个很好的解决方案。 致电setInterval onPressIn 和clearInterval onPressOut。

【讨论】:

在将 setInterval 存储在变量中并将该变量传递给 clearInterval 之后,这对我有用。见w3schools.com/jsref/met_win_clearinterval.asp【参考方案2】:

我能够使用Animated API 使其工作。我使用的参考(除了官方文档)是http://browniefed.com/blog/react-native-press-and-hold-button-actions/

   var ACTION_TIMER = 3000;
   var listenerActive = true;

   getInitialState()
     return
       pressAction: new Animated.Value(0),
       value: 0,
     ;
   ,
   componentWillMount: function() 
     this.state.pressAction.addListener((v) => this.setState(value: v.value));
   ,
   handlePressIn: function() 
     if(!listenerActive) 
       this.state.pressAction.addListener((v) => this.setValueAndChangeAmount(v.value));
       listenerActive = true;
     
     Animated.timing(this.state.pressAction, 
         duration: ACTION_TIMER,
         toValue: 67,
     ).start();
   ,
   handlePressOut: function() 
     this.state.pressAction.removeAllListeners();
     this.setState(pressAction: new Animated.Value(Math.ceil(this.state.value)));
     listenerActive = false;
   ,

我使用 3000ms 和 Math.ceil 来保持与 onPress 相同的行为,因为它不能与 onPressInonPressOut 一起使用。

删除handlePressOut 中的侦听器会停止计数器。使用this.state.value 设置新的pressAction 会将值重置为计数器停止的值。

【讨论】:

以上是关于长按 React Native 不断增加计数器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 react-native 中更新 Tab Navigator 中徽章计数器的状态

React-Native-Navigation (WIX):如何更新底部标签的徽章计数?

如何使计数器在指定日期不断增加到某个数字?

有没有办法在 react-native android 应用程序中控制应用程序图标快捷方式徽章计数?

React Native 同时修改同一个状态

React Hooks 实现计数器