React中宠物状态仅更新饥饿值,无聊值与精力值不更新的问题求助
React中宠物状态仅更新饥饿值,无聊值与精力值不更新的问题求助
我正在开发一个简单的React宠物应用,给宠物设置了hunger(饥饿值)、boredom(无聊值)和energy(精力值)这几个属性,希望它们能按不同的时间间隔自动更新:
- 饥饿值每5秒增长1点(上限100)
- 无聊值每8秒增长1点(上限100)
- 精力值每10秒减少1点(下限0)
但现在遇到了奇怪的问题:只有饥饿值能正常按预期更新,无聊值和精力值完全没动静。我用setInterval来实现定时更新,逻辑看起来和饥饿值的写法一致,可就是它俩不工作。
以下是相关代码:
import { useEffect, useState } from "react"; import { Pet } from "./types/pet"; function App() { const [pet, setPet] = useState<Pet | null>(null); useEffect(() => { // Load pet from localStorage or create a new pet const savedPet = localStorage.getItem("pet"); if (savedPet) { try { const parsedPet = JSON.parse(savedPet) as Pet; setPet(parsedPet); } catch (error) { console.error("Error parsing saved pet:", error); createNewPet(); } } else { createNewPet(); } }, []); const updatePet = (updateFn: (currentPet: Pet) => Partial<Pet>) => { setPet((prevPet) => { if (!prevPet) return null; const updatedPet = { ...prevPet, ...updateFn(prevPet) }; localStorage.setItem("pet", JSON.stringify(updatedPet)); return updatedPet; }); }; useEffect(() => { if (!pet) return; const hungerInterval = setInterval(() => { updatePet((pet) => ({ hunger: Math.min(pet.hunger + 1, 100) })); }, 5000); const boredomInterval = setInterval(() => { updatePet((pet) => ({ boredom: Math.min(pet.boredom + 1, 100) })); }, 8000); const energyInterval = setInterval(() => { updatePet((pet) => ({ energy: Math.max(pet.energy - 1, 0) })); }, 10000); return () => { clearInterval(hungerInterval); clearInterval(boredomInterval); clearInterval(energyInterval); }; }, [pet]); return ( <div> <p>Hunger: {pet.hunger}%</p> <p>Boredom: {pet.boredom}%</p> <p>Energy: {pet.energy}%</p> </div> ); } export default App;
我遇到的现象
- 饥饿值每5秒正常增长,完全符合预期
- 无聊值和精力值没有任何更新,哪怕等了很久也没变化
我已经尝试过的方法
- 反复检查了定时器的时间间隔,确认5000、8000、10000这些数值都是正确的
- 改用了状态的函数式更新方式(也就是
setPet里传函数的写法),确保每次更新都能拿到最新的宠物状态,但问题依然存在,还是只有饥饿值能更新
有没有大佬能帮我分析下原因?该怎么修改才能让三个属性都正常更新呀?
备注:内容来源于stack exchange,提问作者Izaan
相关产品推荐
相关产品推荐

