You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:53:05