我建议您在重新打开选项卡时计算当前时间和上次还原时间之间的差异。这样,您可以根据自上次打开选项卡以来经过的时间恢复能量,确保在重新打开选项卡后立即应用在关闭选项卡时应该发生的任何能量恢复
import React, { useState, useEffect } from "react";
export default function App() {
const [strong, setStrong] = useState(200);
function restoreEnergy() {
const now = Math.floor(Date.now() / 1000);
const lastRestoreTime =
parseInt(localStorage.getItem("lastRestoreTime"));
if (lastRestoreTime) {
const timeSinceLastRestore = now - lastRestoreTime;
const energyToRestore = Math.floor(timeSinceLastRestore / 10);
if (energyToRestore > 0) {
const currentEnergy = parseInt(localStorage.getItem("strong")) ||
200;
const restoredEnergy = currentEnergy + energyToRestore;
localStorage.setItem("strong", restoredEnergy);
setStrong(restoredEnergy);
localStorage.setItem("lastRestoreTime", now.toString());
}
} else {
localStorage.setItem("strong", 200);
localStorage.setItem("lastRestoreTime", now.toString());
}
}
useEffect(() => {
restoreEnergy();
const intervalId = setInterval(() => {
restoreEnergy();
}, 10000);
return () => clearInterval(intervalId);
}, []);
return (
);
}