useEffect的函数需要返回一个cleanup的清除函数或者undefined。而当我们使用await、async的时候,会默认返回一个Promise,所以我们不能在useEffect函数中使用async
import React, { useEffect,useState } from 'react'
const Func=()=>{
let [count,setCount]= useState(0)
const clickHandle=()=>{
setCount(count+1)
}
//相当于componentDidMount componentDidUpdate
useEffect(()=>{
console.log('componentDidMount componentDidUpdate')
})
//相当于componentDidMout
useEffect(()=>{
console.log('componentDidMount')
},[])
//相当于componentDidMout和count值发生改变
useEffect(()=>{
console.log("修改了count")
var time=setInterval(()=>{
console.log("定时器执行")
},1000)
//这里返回了一个函数,在里面可以进行清除定时器的操作
return ()=>{
time&&clearInterval(time)
time=null
}
},[count])
return (<div>
<h4>当前count是:{count}</h4>
<button onClick={clickHandle}>点我修改count</button>
</div>)
}
export default Func
在effect中可以返回一个函数,在里面进行清除定时器的操作