useEffect的函数需要返回一个cleanup的清除函数或者undefined。而当我们使用await、async的时候,会默认返回一个Promise,所以我们不能在useEffect函数中使用async

    1. import React, { useEffect,useState } from 'react'
    2. const Func=()=>{
    3. let [count,setCount]= useState(0)
    4. const clickHandle=()=>{
    5. setCount(count+1)
    6. }
    7. //相当于componentDidMount componentDidUpdate
    8. useEffect(()=>{
    9. console.log('componentDidMount componentDidUpdate')
    10. })
    11. //相当于componentDidMout
    12. useEffect(()=>{
    13. console.log('componentDidMount')
    14. },[])
    15. //相当于componentDidMout和count值发生改变
    16. useEffect(()=>{
    17. console.log("修改了count")
    18. var time=setInterval(()=>{
    19. console.log("定时器执行")
    20. },1000)
    21. //这里返回了一个函数,在里面可以进行清除定时器的操作
    22. return ()=>{
    23. time&&clearInterval(time)
    24. time=null
    25. }
    26. },[count])
    27. return (<div>
    28. <h4>当前count是:{count}</h4>
    29. <button onClick={clickHandle}>点我修改count</button>
    30. </div>)
    31. }
    32. export default Func

    在effect中可以返回一个函数,在里面进行清除定时器的操作