我有一个非常简单的反应代码,使用useState钩子声明一个名为money的状态变量。
然后我使用useEffect钩子触发一个游戏循环以开始一次。
在这个游戏循环中,我只是简单地增加了money状态变量的值。
import React,{ useState,useEffect } from "react";
export default function Game() {
// declare one state variable
const [money,setMoney] = useState(100);
// start gameloop
useEffect(() => {
let anim = requestAnimationFrame(gameloop);
return () => {
cancelAnimationFrame(anim);
};
},[]);
function gameloop() {
setMoney(money => money + 1);
console.log(money); // always returns 100
requestAnimationFrame(gameloop);
}
return (
<div>
<div>{money}</div>
</div>
);
}
UI正确更新了,所以当我使用react dev工具查看状态时,状态也会更新。
但是,在gameloop函数中,当我执行console.log(money);
时,它始终会打印100 。
似乎,如果我尝试读取gameloop函数中的money变量,则它始终是初始状态,而不是真实状态。
任何关于我在这里做错什么的想法?