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

React组件中根据数据比例值切换图片src却无内容显示的问题求助

React组件中根据数据比例值切换图片src却无内容显示的问题求助

嘿,我来帮你排查这个问题~你的代码里有两个核心错误导致图片无法显示,我一步步给你拆解:

1. JSX中放置了未执行的函数定义,而非渲染逻辑

你在Fragment里写了{() => { switch... }},这只是把一个函数定义放在了JSX中,并没有执行它!React在渲染JSX时,遇到函数定义会直接跳过(因为它不是可渲染的DOM节点或组件),所以页面自然一片空白。

2. Switch语句的匹配逻辑完全错误

你的switch写法是switch(ratio),然后case写的是case ratio <20:——这相当于把ratio的值和ratio<20的布尔结果做比较,比如当ratio是10时,ratio<20是true,switch会把10和true对比,完全不匹配,所以不会进入任何case分支,自然也不会返回图片组件。

接下来给你两种修正后的可行方案,你可以按需选择:


方案一:修正Switch逻辑+立即执行函数

import awful from "../../assets/awful.gif";
import notgood from "../../assets/notgood.gif";
import good from "../../assets/good.gif";
import verygood from "../../assets/verygood.gif";
import perfect from "../../assets/perfect.gif";

function displayRecapGif(ratio) {
  return (
    <>
      {/* 改成立即执行函数,让逻辑执行并返回图片组件 */}
      {(() => {
        // 把switch的表达式改成true,让case的布尔条件直接匹配
        switch (true) {
          case ratio < 20:
            return <img src={awful} className="w-32 h-32" alt="表现很差" />;
          case ratio >= 20 && ratio < 50:
            return <img src={notgood} className="w-32 h-32" alt="表现一般" />;
          case ratio >= 50 && ratio < 70:
            return <img src={good} className="w-32 h-32" alt="表现不错" />;
          case ratio >= 70 && ratio < 100:
            return <img src={verygood} className="w-32 h-32" alt="表现很好" />;
          case ratio === 100:
            return <img src={perfect} className="w-32 h-32" alt="表现完美" />;
          // 处理超出预期的ratio值,避免空白
          default:
            return <div>暂无匹配图片</div>;
        }
      })()}
    </>
  );
}

export default displayRecapGif;

方案二:改用If-Else逻辑(更直观易读)

其实对于这种范围判断,if-else的写法比switch更清晰,也不容易出错:

import awful from "../../assets/awful.gif";
import notgood from "../../assets/notgood.gif";
import good from "../../assets/good.gif";
import verygood from "../../assets/verygood.gif";
import perfect from "../../assets/perfect.gif";

function displayRecapGif(ratio) {
  let imgSrc = null;
  let altText = "";

  if (ratio < 20) {
    imgSrc = awful;
    altText = "表现很差";
  } else if (ratio >= 20 && ratio < 50) {
    imgSrc = notgood;
    altText = "表现一般";
  } else if (ratio >= 50 && ratio < 70) {
    imgSrc = good;
    altText = "表现不错";
  } else if (ratio >= 70 && ratio < 100) {
    imgSrc = verygood;
    altText = "表现很好";
  } else if (ratio === 100) {
    imgSrc = perfect;
    altText = "表现完美";
  }

  // 有图片源才渲染img,否则显示兜底内容
  return imgSrc ? <img src={imgSrc} className="w-32 h-32" alt={altText} /> : <div>暂无匹配图片</div>;
}

export default displayRecapGif;

另外我还加了alt属性,这是img标签的必填属性,对网页可访问性很重要;同时加了兜底逻辑,避免当ratio不在你预期的范围内时,页面再次出现空白的情况。

你可以试试这两种方案,应该就能正常显示图片啦 😊


内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 08:14:33