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

React中如何用三元运算符按条件切换图片类?是否需useEffect重渲染?

问题排查与解决

不需要用useEffect,React中状态更新本身就会触发组件重渲染,你的问题大概率出在状态更新的逻辑细节上,具体排查和修复方案如下:

1. 修复状态更新的闭包问题

你的UpgradeClickPower函数直接引用了currentMana、currentClickUpgradeCost这些状态值,当组件重渲染后,函数捕获的还是旧的状态快照,会导致判断逻辑出错,甚至setClickPower根本没被执行。

改成函数式更新来获取最新状态值:

const UpgradeClickPower = (newPower, upgradeCost) => {
  setMana(prevMana => {
    // 用prevMana拿到最新的 mana 状态
    if (prevMana < currentClickUpgradeCost) {
      alert('Not Enough Mana!!');
      return prevMana; // 不更新mana
    } else {
      setClickPower(newPower);
      setClickUpgradeCost(upgradeCost);
      return prevMana - currentClickUpgradeCost;
    }
  });
};

如果currentClickUpgradeCost也是状态变量,同样要用函数式更新获取它的最新值:

const UpgradeClickPower = (newPower, upgradeCost) => {
  setMana(prevMana => {
    return setClickUpgradeCost(prevCost => {
      if (prevMana < prevCost) {
        alert('Not Enough Mana!!');
        return prevCost;
      } else {
        setClickPower(newPower);
        return upgradeCost;
      }
    });
  });
};

2. 验证状态是否真的更新

在组件内添加日志,确认currentClickPower的值是否正确变化:

console.log('当前点击力:', currentClickPower);

如果值确实≥5但类没切换,检查CSS类名是否写错,比如BlueOrb的样式是否被其他规则覆盖,或者滤镜属性是否正确设置。

3. 简化类名判断写法

把类名拼接改成更清晰的模板字符串写法,避免语法错误:

<img 
  className={`Orb ${currentClickPower >= 5 ? 'BlueOrb' : ''}`} 
  src={Orb} 
  alt="Mana Orb" 
  height="200"
/>

内容的提问来源于stack exchange,提问作者Tolga.Ulukan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:48:24