求助一下关于useEffect的中使用useState的困惑·····

33 阅读1分钟
export default function Login() {
  const [positionY, setPositionY] = useState(0)
  console.log("login" ,positionY)
  let timer;
  useEffect(() => {
    timer = setInterval(() => { 
      setPositionY(positionY+1)
    }, 1000);
    return () => {
        clearInterval(timer);
    };
  }, []);

  return (
    <div>{positionY}</div>
  )
}

关于上面的代码,由于useEffect依赖了空数组,所以即便是render了之后,useEffect也会执行旧的函数。旧函数中闭包positionY=0,所以一直会setPositionY(1)····这个我能理解

但是为什么下面的写法就可以了? setPositionY(positionY=>positionY+1)。这里到底做了什么,为啥能改闭包中的变量positionY???

   export default function Login() {
  const [positionY, setPositionY] = useState(0)
  console.log("login" ,positionY)
  let timer;
  useEffect(() => {
    timer = setInterval(() => { 
       //这里到底做了什么,为啥能改闭包中的变量positionY???
      setPositionY(positionY=>positionY+1)
    }, 1000);
    return () => {
        clearInterval(timer);
    };
  }, []);

  return (
    <div>{positionY}</div>
  )
}