创见博客
手写实现一个倒计时
七崽爱吃小饼干2026/03/02阅读 0

我这里通过setCount的函数式写法,让setCount从hooks链上直接获取之前的count值。这里也可以用useRef获得一个稳定的引用来解决。

第二个点就是,因为是在严格模式下进行的,所以useEffect会执行两次,会创建两个interval。所以需要卸载interval。否则会出现count一次减2的情况。

第三点在于减到0的时候就需要停止倒计时,也就是需要清除定时器。我这里在precount变成0的时候进行清除。

jsx
import { useEffect, useState } from 'react'
import './App.css'

function App() {
  const [count, setCount] = useState(3)
  useEffect(() => {
    const timer = setInterval(() => {
      setCount((preCount) => {
        if(preCount > 0){
          return preCount - 1
        }else{
          clearInterval(timer)
          return 0
        }
      })
    }, 1000)
    return () => {
      clearInterval(timer)
    }
  }, [])
  return (
    <>
      {count}
    </>
  )
}

export default App


评论
0/100