React-Native中使用验证码倒计时的按钮实例代码
更新时间:2017年04月17日 09:21:02 作者:尹_路人
这篇文章主要介绍了React-Native中使用验证码倒计时的按钮实例代码,具有一定的参考价值,有兴趣的可以了解一下
开发过程中有获取手机验证码的场景,这时候有这样的要求:
1,点击“获取验证码”的按钮,发起获取验证码的网络请求,同时按钮置为不可用
2,如果网络请求成功,按钮继续不可用,但按钮上文本改为倒计时((*s)后重新获取)
3,如果网络请求失败,按钮置为可用
4,倒计时结束,按钮可用

直接上代码
源码
import React,{PropTypes} from 'react';
import {View,Text,TouchableOpacity} from 'react-native';
export default class TimerButton extends React.Component {
constructor(props) {
super(props)
this.state = {
timerCount: this.props.timerCount || 90,
timerTitle: this.props.timerTitle || '获取验证码',
counting: false,
selfEnable: true,
};
this._shouldStartCountting = this._shouldStartCountting.bind(this)
this._countDownAction = this._countDownAction.bind(this)
}
static propTypes = {
style: PropTypes.object,
textStyle: Text.propTypes.style,
onClick: PropTypes.func,
disableColor: PropTypes.string,
timerTitle: PropTypes.string,
enable: React.PropTypes.oneOfType([React.PropTypes.bool,React.PropTypes.number])
};
_countDownAction(){
const codeTime = this.state.timerCount;
this.interval = setInterval(() =>{
const timer = this.state.timerCount - 1
if(timer===0){
this.interval&&clearInterval(this.interval);
this.setState({
timerCount: codeTime,
timerTitle: this.props.timerTitle || '获取验证码',
counting: false,
selfEnable: true
})
}else{
console.log("---- timer ",timer);
this.setState({
timerCount:timer,
timerTitle: `重新获取(${timer}s)`,
})
}
},1000)
}
_shouldStartCountting(shouldStart){
if (this.state.counting) {return}
if (shouldStart) {
this._countDownAction()
this.setState({counting: true,selfEnable:false})
}else{
this.setState({selfEnable:true})
}
}
componentWillUnmount(){
clearInterval(this.interval)
}
render(){
const {onClick,style,textStyle,enable,disableColor} = this.props
const {counting,timerTitle,selfEnable} = this.state
return (
<TouchableOpacity activeOpacity={counting ? 1 : 0.8} onPress={()=>{
if (!counting && enable && selfEnable) {
this.setState({selfEnable:false})
this.props.onClick(this._shouldStartCountting)
};
}}>
<View style={[{width:100, height:44,flex:1,justifyContent:'center',alignItems:'center'},style]}>
<Text style={[{fontSize: 16},textStyle,{color: ((!counting && enable && selfEnable) ? textStyle.color : disableColor || 'gray')}]}>{timerTitle}</Text>
</View>
</TouchableOpacity>
)
}
}
使用
<TimerButton enable={phoneNumber.length}
style={{width: 110,marginRight: 10}}
textStyle={{color: StaticColor.COLOR_MAIN}}
timerCount={10}
onClick={(shouldStartCountting)=>{
this._requestSMSCode(shouldStartCountting)
}}/>
onClick:触发后按钮selfEnable会立即被置为false- 通过
onClick中的一系列逻辑处理之后需要调用回调函数结束倒计时 shouldStartCountting:回调函数,接受一个Bool类型的参数shouldStartCountting(true),开始倒计时,倒计时结束时自动恢复初始状态shouldStartCountting(false), 按钮的selfEnable会立即被置为true
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
Android 关于ExpandableListView刷新问题的解决方法
下面小编就为大家带来一篇Android 关于ExpandableListView刷新问题的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-12-12
Android Studio查看Android 5.x源码的步骤详解
Google为Android开发者带来Android Studio,用来取代Eclipse。从Android Studio出现起,整机开发和Android源码阅读和编辑一定能用上它。这篇文章小编就带大家学习下如何使用Android Studio查看Android 5.x源码,有需要的可以参考借鉴。2016-09-09
浅谈Android实践之ScrollView中滑动冲突处理解决方案
涉及到了ViewPager,MapView,ListView,就需要ScrollView来做一下支援,这篇文章主要介绍了浅谈Android实践之ScrollView中滑动冲突处理解决方案,有需要的可以来了解一下。2016-12-12
Android基于自带的DownloadManager实现下载功能示例
这篇文章主要介绍了Android基于自带的DownloadManager实现下载功能,结合实例形式分析了DownloadManager实现下载功能的具体操作步骤与相关注意事项,需要的朋友可以参考下2017-08-08
Android变形(Transform)之Camera使用介绍
Camera主要实现3D的变形,有转动,旋转等,Camera的源码是由Native(本地代码)实现,提供的接口也比较简单,感兴趣的朋友可以参考下,或许对你学习有所帮助2013-02-02


最新评论