UNPKG

812 BJavaScriptView Raw
1import { useState } from "react";
2import useInterval from "./useInterval";
3
4/**
5 * 验证码倒计时
6 * @param {Number} duration - 倒计时时长
7 * @return {Array} [text:String, running:Boolean, start:Function]
8 */
9export default function useCountdown(duration = 60) {
10 const DEFAULT = "获取验证码";
11 const [text, setText] = useState(DEFAULT);
12 const [second, setSecond] = useState(duration);
13 const running = second != duration;
14
15 const start = () => setSecond(v => v - 1);
16
17 useInterval(
18 () => {
19 if (second === 0) {
20 setSecond(duration);
21 setText(DEFAULT);
22 return;
23 }
24 setSecond(v => v - 1);
25 setText(`${second}秒后重新获取`);
26 },
27 second == duration ? null : 1000
28 );
29
30 return [text, running, start];
31}