最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React-Native中使用驗(yàn)證碼倒計(jì)時(shí)的按鈕實(shí)例代碼

 更新時(shí)間:2017年04月17日 09:21:02   作者:尹_路人  
這篇文章主要介紹了React-Native中使用驗(yàn)證碼倒計(jì)時(shí)的按鈕實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下

開發(fā)過程中有獲取手機(jī)驗(yàn)證碼的場(chǎng)景,這時(shí)候有這樣的要求:

1,點(diǎn)擊“獲取驗(yàn)證碼”的按鈕,發(fā)起獲取驗(yàn)證碼的網(wǎng)絡(luò)請(qǐng)求,同時(shí)按鈕置為不可用

2,如果網(wǎng)絡(luò)請(qǐng)求成功,按鈕繼續(xù)不可用,但按鈕上文本改為倒計(jì)時(shí)((*s)后重新獲取)

3,如果網(wǎng)絡(luò)請(qǐng)求失敗,按鈕置為可用

4,倒計(jì)時(shí)結(jié)束,按鈕可用

直接上代碼

源碼

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 || '獲取驗(yàn)證碼',
      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 || '獲取驗(yàn)證碼',
          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:觸發(fā)后按鈕selfEnable會(huì)立即被置為false
  • 通過onClick中的一系列邏輯處理之后需要調(diào)用回調(diào)函數(shù)結(jié)束倒計(jì)時(shí)
  • shouldStartCountting:回調(diào)函數(shù),接受一個(gè)Bool類型的參數(shù)
    • shouldStartCountting(true),開始倒計(jì)時(shí),倒計(jì)時(shí)結(jié)束時(shí)自動(dòng)恢復(fù)初始狀態(tài)
    • shouldStartCountting(false), 按鈕的selfEnable會(huì)立即被置為true

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android 關(guān)于ExpandableListView刷新問題的解決方法

    Android 關(guān)于ExpandableListView刷新問題的解決方法

    下面小編就為大家?guī)硪黄狝ndroid 關(guān)于ExpandableListView刷新問題的解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • Android Studio查看Android 5.x源碼的步驟詳解

    Android Studio查看Android 5.x源碼的步驟詳解

    Google為Android開發(fā)者帶來Android Studio,用來取代Eclipse。從Android Studio出現(xiàn)起,整機(jī)開發(fā)和Android源碼閱讀和編輯一定能用上它。這篇文章小編就帶大家學(xué)習(xí)下如何使用Android Studio查看Android 5.x源碼,有需要的可以參考借鑒。
    2016-09-09
  • Windows下搭建Android開發(fā)環(huán)境

    Windows下搭建Android開發(fā)環(huán)境

    這篇文章主要介紹了Windows下搭建Android開發(fā)環(huán)境,需要的朋友可以參考下
    2015-09-09
  • Android播放assets文件里視頻文件相關(guān)問題分析

    Android播放assets文件里視頻文件相關(guān)問題分析

    這篇文章主要介紹了Android播放assets文件里視頻文件相關(guān)問題分析,結(jié)合Android播放assets文件出現(xiàn)錯(cuò)誤的實(shí)際問題給出了原因分析與解決方法參考,需要的朋友可以參考下
    2016-08-08
  • 淺談Android實(shí)踐之ScrollView中滑動(dòng)沖突處理解決方案

    淺談Android實(shí)踐之ScrollView中滑動(dòng)沖突處理解決方案

    涉及到了ViewPager,MapView,ListView,就需要ScrollView來做一下支援,這篇文章主要介紹了淺談Android實(shí)踐之ScrollView中滑動(dòng)沖突處理解決方案,有需要的可以來了解一下。
    2016-12-12
  • Android基于自帶的DownloadManager實(shí)現(xiàn)下載功能示例

    Android基于自帶的DownloadManager實(shí)現(xiàn)下載功能示例

    這篇文章主要介紹了Android基于自帶的DownloadManager實(shí)現(xiàn)下載功能,結(jié)合實(shí)例形式分析了DownloadManager實(shí)現(xiàn)下載功能的具體操作步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-08-08
  • Android?studio實(shí)現(xiàn)app登錄界面

    Android?studio實(shí)現(xiàn)app登錄界面

    這篇文章主要為大家詳細(xì)介紹了Android?studio實(shí)現(xiàn)app登錄界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android模擬登錄評(píng)論CSDN實(shí)現(xiàn)代碼

    Android模擬登錄評(píng)論CSDN實(shí)現(xiàn)代碼

    本篇文章主要介紹了Android模擬登錄評(píng)論CSDN實(shí)現(xiàn)代碼,可以實(shí)現(xiàn)登陸發(fā)表評(píng)論到官方網(wǎng)站,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2016-11-11
  • Android變形(Transform)之Camera使用介紹

    Android變形(Transform)之Camera使用介紹

    Camera主要實(shí)現(xiàn)3D的變形,有轉(zhuǎn)動(dòng),旋轉(zhuǎn)等,Camera的源碼是由Native(本地代碼)實(shí)現(xiàn),提供的接口也比較簡(jiǎn)單,感興趣的朋友可以參考下,或許對(duì)你學(xué)習(xí)有所幫助
    2013-02-02
  • Android使用ImageView實(shí)現(xiàn)支持手勢(shì)縮放效果

    Android使用ImageView實(shí)現(xiàn)支持手勢(shì)縮放效果

    這篇文章主要介紹了Android使用ImageView實(shí)現(xiàn)支持手勢(shì)縮放效果,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09

最新評(píng)論

富阳市| 威远县| 隆安县| 台州市| 姚安县| 福海县| 藁城市| 长垣县| 龙海市| 枞阳县| 康平县| 文水县| 丰台区| 如皋市| 门源| 伊金霍洛旗| 临泽县| 遂昌县| 赤峰市| 福海县| 内黄县| 农安县| 甘谷县| 普安县| 安福县| 油尖旺区| 夏河县| 芦山县| 三门县| 健康| 黑龙江省| 衡水市| 宽城| 休宁县| 略阳县| 西林县| 时尚| 马山县| 高碑店市| 宜良县| 白银市|