import React, { useState } from 'react'
import useInterval from 'react-use/lib/useInterval'
export interface TimeBtn {
onClick: (start: Function) => void
time?: number
}
export const TimeBtn = ({ onClick, time = 60 }: TimeBtn) => {
const [text, setText] = useState('获取验证码')
const [state, setState] = useState(time)
const [isRunning, toggleIsRunning] = useState(false)
useInterval(
() => {
if (state > 0) {
setState(state - 1)
} else {
setState(time)
setText('重新发送')
toggleIsRunning(false)
}
},
isRunning ? 1000 : null
)
return (
<button
disabled={isRunning}
onClick={() => {
onClick(() => toggleIsRunning(true))
}}
className="TimeBtn"
style={{
cursor: isRunning ? 'not-allowed' : 'pointer',
}}
>
{isRunning ? (
<span
style={{
color: '#BBB6C8',
}}
>
{state}
</span>
) : (
text
)}
</button>
)
}
调用:
// sendCode发送验证码后调用start开始计时
<TimeBtn
onClick={async start => {
await getCode()
start()
}}
/>