React注冊(cè)倒計(jì)時(shí)功能的實(shí)現(xiàn)
一、React版本
16.4.1
二、具體代碼如下
設(shè)置state屬性
constructor(props){
super(props);
this.state = {
btnText:'獲取驗(yàn)證碼',
seconds: 60, //稱數(shù)初始化
liked: true //獲取驗(yàn)證碼文案
}
}
2.倒計(jì)時(shí)
// 獲取驗(yàn)證碼
sendCode = () => {
let siv = setInterval(() => {
this.setState({
liked:false,
seconds:this.state.seconds - 1,
},() => {
if(this.state.seconds == 0){
clearInterval(siv);
this.setState({
liked:true,
secounds:60
})
}
});
},1000);
}
3.jsx代碼
<FormItem
{...formItemLayout}
label="驗(yàn)證碼"
>
<Row gutter={8}>
<Col span={6}>
{getFieldDecorator('captcha', {
rules: [{ required: true, message: '請(qǐng)輸入短信驗(yàn)證碼!' }],
})(
<Input />
)}
</Col>
<Col span={12}>
<Button onClick={this.sendCode} disabled={!this.state.liked}>
{
this.state.liked
?
<span>{this.state.btnText}</span>
:
<span>{this.state.seconds + ' s 后重新發(fā)送'}</span>
}
</Button>
</Col>
</Row>
</FormItem>
明明很簡(jiǎn)單的,但是看網(wǎng)上有的代碼搞得很復(fù)雜一樣,當(dāng)然也可以用react相關(guān)插件,不過我覺得這樣更簡(jiǎn)潔。
ps:react 獲取服務(wù)器端時(shí)間倒計(jì)時(shí)
import React, { Component } from 'react'
import axios from 'axios'
export default class Timer extends Component {
constructor(props) {
super(props)
this.state = {
bool: false,
days: '0',
hours: '00',
minutes: '00',
seconds: '00'
}
}
componentDidMount() {
this.start()
}
async start() {
this.timer && clearTimeout(this.timer) // 先清除一遍定時(shí)器,避免被調(diào)用多次
// 發(fā)起任意一個(gè)服務(wù)器請(qǐng)求, 然后從headers 里獲取服務(wù)器時(shí)間
let leftTime = await axios.get('/').then(response => {
return new Date(this.props.date).getTime() - new Date(response.headers.date).getTime() // 服務(wù)器與倒計(jì)時(shí)的 時(shí)間差
}).catch(error => {
console.log(error)
return 0 // 這里發(fā)送的服務(wù)器請(qǐng)求失敗 設(shè)為0
})
// 倒計(jì)時(shí)
this.timer = setInterval(() => {
leftTime = leftTime - 1000
let { bool, days = '0', hours = '00', minutes = '00', seconds = '00' } = this.countdown(leftTime)
if (bool) { // 結(jié)束倒計(jì)時(shí)
clearTimeout(this.timer)
}
this.setState({
bool,
days,
hours,
minutes,
seconds
})
}, 1000)
}
/**
* 倒計(jì)時(shí)
* @param leftTime 要倒計(jì)時(shí)的時(shí)間戳
*/
countdown(leftTime) {
let bool = false
if (leftTime <= 0) {
bool = true
return { bool }
}
var days = parseInt(leftTime / 1000 / 60 / 60 / 24, 10) //計(jì)算剩余的天數(shù)
var hours = parseInt(leftTime / 1000 / 60 / 60 % 24, 10)
if (hours < 10) {
hours = '0' + hours
}
var minutes = parseInt(leftTime / 1000 / 60 % 60, 10)
if (minutes < 10) {
minutes = '0' + minutes
}
var seconds = parseInt(leftTime / 1000 % 60, 10)
if (seconds < 10) {
seconds = '0' + seconds
}
return { bool, days, hours, minutes, seconds }
}
componentWillUnmount() {
clearTimeout(this.timer)
}
render() {
let { bool, days, hours, minutes, seconds } = this.state
return (
<div>
{
bool ?
<div>活動(dòng)已結(jié)束</div> :
<div>
{days} 天 {hours} : {minutes} : {seconds}
</div>
}
</div>
)
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 基于vue、react實(shí)現(xiàn)倒計(jì)時(shí)效果
- 使用react render props實(shí)現(xiàn)倒計(jì)時(shí)的示例代碼
- React Native驗(yàn)證碼倒計(jì)時(shí)工具類分享
- react native中的聊天氣泡及timer封裝成的發(fā)送驗(yàn)證碼倒計(jì)時(shí)
- ReactNative短信驗(yàn)證碼倒計(jì)時(shí)控件的實(shí)現(xiàn)代碼
- React-Native中使用驗(yàn)證碼倒計(jì)時(shí)的按鈕實(shí)例代碼
- React倒計(jì)時(shí)功能實(shí)現(xiàn)代碼——解耦通用
相關(guān)文章
React中使用react-json-view展示JSON數(shù)據(jù)的操作方法
react-json-view是一個(gè)用于顯示和編輯javascript數(shù)組和JSON對(duì)象的React組件,本文給大家分享React中使用react-json-view展示JSON數(shù)據(jù)的操作方法,感興趣的朋友一起看看吧2023-12-12
React Hook用法示例詳解(6個(gè)常見hook)
這篇文章主要介紹了React Hook用法詳解(6個(gè)常見hook),本文通過實(shí)例代碼給大家介紹了6個(gè)常見hook,需要的朋友可以參考下2021-04-04
基于React實(shí)現(xiàn)無限滾動(dòng)表格
以文本為例,為了實(shí)現(xiàn)無限循環(huán)的視覺效果,我們需要準(zhǔn)備兩段相同的文本,并讓第二段文本的頭部銜接在第一段文本的尾部,同時(shí),為兩段文本設(shè)置相同的滾動(dòng)動(dòng)畫,本文給大家介紹了基于React實(shí)現(xiàn)無限滾動(dòng)表格,需要的朋友可以參考下2023-11-11
react-pdf實(shí)現(xiàn)將pdf文件轉(zhuǎn)為圖片,用于頁面展示
這篇文章主要介紹了react-pdf實(shí)現(xiàn)將pdf文件轉(zhuǎn)為圖片,用于頁面展示問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
一文帶你掌握React類式組件中setState的應(yīng)用
這篇文章主要為大家詳細(xì)介紹了介紹了React類式組件中setState的三種寫法以及簡(jiǎn)單討論下setState?到底是同步的還是異步的,感興趣的可以了解下2024-02-02
React Native 資源包拆分實(shí)戰(zhàn)分析
這篇文章主要為大家介紹了React Native 資源包拆分實(shí)戰(zhàn)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
React性能優(yōu)化的實(shí)現(xiàn)方法詳解
react憑借virtual DOM和diff算法擁有高效的性能,除此之外也有很多其他的方法和技巧可以進(jìn)一步提升react性能,在本文中我將列舉出可有效提升react性能的幾種方法,幫助我們改進(jìn)react代碼,提升性能2023-01-01
關(guān)于React動(dòng)態(tài)修改元素樣式的三種方式
這篇文章主要介紹了關(guān)于React動(dòng)態(tài)修改元素樣式的三種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08

