У меня есть очень простой код реакции, объявляющий переменную состояния с именем money с помощью хука useState .
Затем я запускаю gamel oop для запуска один раз, используя хук useEffect .
Внутри этой игры oop я просто увеличиваю значение переменной состояния денег.
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>
);
}
Пользовательский интерфейс правильно обновляется, так же как и состояние, когда я смотрю на него с помощью инструментов разработки.
Однако внутри функции gamel oop, когда я выполняю console.log(money);
, он всегда печатает 100 .
Кажется, что если я попытаюсь прочтите переменную money внутри моей функции gamel oop, это всегда начальные состояния и никогда не реальное.
Есть идеи, что я здесь делаю не так?