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>
)
}