24.说说你对Hook闭包陷阱的理解

    在开发中我们会遇到一下的场景:

    import { useEffect, useState } from "react";
    
    export default function App(){
      const [state, setState] = useState(1)
      useEffect(() => {
        setInterval(()=>{
          console.log(state);
        })
      }, []);
    
      return (
        <button onClick={()=>setState(state+1)}>点击</button>
      )
    }

    其实useEffect的场景和我们for循环使用let定义变量的逻辑是一样的,它是React组件更新流程以及useEffect的视线自然而然的结果

    原因是每次渲染APP组件都会创建一个函数执行上下文,其中的打印语句还是指向的第一次打印的上下文state一直都是1

    为什么useRef不同呢,可以拿到最新的值,因为useRef返回的都是同一个对象,每次组件更新所生成的ref指向的都是同一片内存空间