为什么 useEffect 钩子不为每个渲染设置新的 setInterval ?

据我所知, useEffect() 钩子取代了 componentDidUpdate()、componentDidMount()、componentWillUnmount(),因此它被调用来代替这 3 个方法中的每一个。


所以在我的代码中我有:(文档中有一个每秒递增的计时器)


useEffect(()=>{


 const intervalId = setInterval(()=>{

  setTime((prevTime) => prevTime + 1)

 },1000)


 // return ()=>{

 //   clearInterval(intervalId)

 // }


},[])

据我了解,将空数组作为第二个参数会使 componentDidUpdate() 不会调用 useEffect ,因此其他两个方法都会调用它。


我想要我不明白的是为什么在 componentWillUnmount() 时不调用 useEffect - 我认为这是使用新计时器更新组件之前的时刻。


最后为什么即使我取消注释/注释clearInterval()部分它也会以相同的方式工作?


jeck猫
浏览 63回答 1
1回答

慕慕森

useEffect 返回的方法clearInterval(intervalId)是您想要放入 componentWillUnmount() 中的代码的地方。用于清理。从生命周期的角度来看,useEffect 的调用方式并不等同于 componentWillUnmount(),只有它返回的方法才是。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript