我是靠谱客的博主 细心冬瓜,最近开发中收集的这篇文章主要介绍如何自己手写一个React的有倒计时功能的hook?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如何自己封装一个有倒计时功能的hook?

代码如下:

import React, {useState, useEffect, useRef} from 'react'

export const useCountDown = () => {
/* 
  基本思路:
  1. 写一个定时器
  2. 提供方法   -  可以直接调用,然后开启定时器
  3. 清除定时器
  4. 设置节流
  5. 设置文本的状态
*/
  // 定义倒计时的数量
  var [count, setCount] = useState(0)
  // 定义节流的开关
  var [flag, setFlag] = useState(false)
  var timeId = useRef(null)
  var [timeText, setTimeText] = useState('')
  // 调用 hooks  -- 销毁组件时
  useEffect(()=> {
    // 清除副作用
    return ()=> {
      clearInterval(timeId.current)
    }
    // 这里的依赖项是[],表示只执行一次
  }, [])
  // 关闭定时器
  useEffect(()=> {
    // 进行判断:如果 = 0,说明时间走完了。 就停止定时器
    if (count ===0) {
      // 清除定时器
      clearInterval(timeId.current)
      // 把开关设置为 false
       setFlag(false)
      //  修改按钮的文字
      setTimeText('获取验证码')
    } else {
      setTimeText((count-1) + 's之后获取验证码')
    }
    // 第二个参数是具体的值, 当这个值发生改变的时候,就会触发
    // 这里依赖的是count,count每发生一次改变,就触发一次
  }, [count])
  // 定义开启的方法
  const  start = () => {
    // 判断:如果开关是 false, 表示不能点击, 是true,才能点击
    // 开关默认是 false,直接不用执行跟后面的代码
    if (flag) return
    // 能走到这里,说明开关是开的,这里就需要关闭开关
    // 在这里关闭时错误的,因为上面有一个判断,他不会走这个
    // setFlag(false)
    setCount(10)
    timeId.current = setInterval(()=> {
      // 在这里开启开关
      setFlag(true)
      setCount((count)=> {
        // count  -- 这里需要把参数传进来, 不然获取到的是旧值
        console.log(count);
        return count -1
      })
    }, 1000)
  }
  // 返回数据和方法:
  // start:开启倒计时的方法
  // count: 倒计时的数字
  // flag:节流的开关
  // timeText:倒计时的文字
  return {start, count, flag, timeText}
}

最后

以上就是细心冬瓜为你收集整理的如何自己手写一个React的有倒计时功能的hook?的全部内容,希望文章能够帮你解决如何自己手写一个React的有倒计时功能的hook?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部